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;
        });
}

如何更新注册码?

他们更改了此 PRRegisterType 的签名,现在使用 ITypeLifetimeManager 而不是 LifetimeManager

HierarchicalLifetimeManager 现在正在实现 ITypeLifetimeManager 接口,因此您只需更新 RegisterMediator 方法中的 lifetimeManager 参数:

public static IUnityContainer RegisterMediator(this IUnityContainer container, 
                                                    ITypeLifetimeManager lifetimeManager)
{
    return container.RegisterType<IMediator, Mediator>(lifetimeManager)
        ...
}