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
我在我的 .NET Core 2.1 项目上使用 Unity DI Container v5.8.4,我需要注册 Mediator
对象,我使用的是建议的配置 here.
现在我已经更新到 v5.9.4 并且我有关于 RegisterType
方法参数的错误:
Cannot convert from 'Unity.Lifetime.LifetimeManager' to '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;
});
}
如何更新注册码?
他们更改了此 PR 中 RegisterType
的签名,现在使用 ITypeLifetimeManager
而不是 LifetimeManager
。
HierarchicalLifetimeManager
现在正在实现 ITypeLifetimeManager
接口,因此您只需更新 RegisterMediator
方法中的 lifetimeManager
参数:
public static IUnityContainer RegisterMediator(this IUnityContainer container,
ITypeLifetimeManager lifetimeManager)
{
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
...
}
我在我的 .NET Core 2.1 项目上使用 Unity DI Container v5.8.4,我需要注册 Mediator
对象,我使用的是建议的配置 here.
现在我已经更新到 v5.9.4 并且我有关于 RegisterType
方法参数的错误:
Cannot convert from 'Unity.Lifetime.LifetimeManager' to '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;
});
}
如何更新注册码?
他们更改了此 PR 中 RegisterType
的签名,现在使用 ITypeLifetimeManager
而不是 LifetimeManager
。
HierarchicalLifetimeManager
现在正在实现 ITypeLifetimeManager
接口,因此您只需更新 RegisterMediator
方法中的 lifetimeManager
参数:
public static IUnityContainer RegisterMediator(this IUnityContainer container,
ITypeLifetimeManager lifetimeManager)
{
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
...
}