我在.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;
});
}
我该怎么做才能更新注册码?
答案 0 :(得分:4)
他们在此PR中更改了RegisterType
的签名,现在使用的是ITypeLifetimeManager
而不是LifetimeManager
。
HierarchicalLifetimeManager
现在正在实现ITypeLifetimeManager
接口,因此您只需要在lifetimeManager
方法中更新RegisterMediator
参数:
public static IUnityContainer RegisterMediator(this IUnityContainer container,
ITypeLifetimeManager lifetimeManager)
{
return container.RegisterType<IMediator, Mediator>(lifetimeManager)
...
}