Unity DI Container RegisterType方法打破了从v5.8.x到v5.9.x的更改

时间:2019-02-13 07:44:26

标签: dependency-injection .net-core unity-container mediatr

我在.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 个答案:

答案 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)
        ...
}
相关问题