Unity DI Container RegisterType 方法中断从 v5.8.x 到 v5.9.x 的更改
Posted
技术标签:
【中文标题】Unity DI Container RegisterType 方法中断从 v5.8.x 到 v5.9.x 的更改【英文标题】:Unity DI Container RegisterType method breaking changes from v5.8.x to v5.9.x 【发布时间】:2019-07-06 23:28:19 【问题描述】:我在我的 .NET Core 2.1 项目中使用 Unity DI Container v5.8.4,我需要注册 Mediator
对象,我使用的是建议的配置 here。
现在我已经更新到 v5.9.4 并且我有一个关于 RegisterType
方法参数的错误:
无法从“Unity.Lifetime.LifetimeManager”转换为“Unity.Injection.InjectionMember”
这是我的实际代码:
public static IUnityContainer RegisterMediator(this IUnityContainer container, LifetimeManager lifetimeManager)
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
.RegisterInstance<ServiceFactory>(type =>
var enumerableType = type
.GetInterfaces()
.Concat(new[] type )
.FirstOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>));
return enumerableType != null
? container.ResolveAll(enumerableType.GetGenericArguments()[0])
: container.IsRegistered(type)
? container.Resolve(type)
: null;
);
我要更新注册码怎么办?
【问题讨论】:
【参考方案1】:他们已经更改了RegisterType
在这个PR 中的签名,现在它使用ITypeLifetimeManager
而不是LifetimeManager
。
HierarchicalLifetimeManager
现在正在实现ITypeLifetimeManager
接口,因此您只需在RegisterMediator
方法中更新lifetimeManager
参数:
public static IUnityContainer RegisterMediator(this IUnityContainer container,
ITypeLifetimeManager lifetimeManager)
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
...
【讨论】:
以上是关于Unity DI Container RegisterType 方法中断从 v5.8.x 到 v5.9.x 的更改的主要内容,如果未能解决你的问题,请参考以下文章