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

Che*_*Cat 3 dependency-injection unity-container .net-core mediatr

我在我的 .NET Core 2.1 项目上使用了Unity DI Container v5.8.4,我需要注册Mediator对象,我正在使用这里建议的配置。

现在我已经更新到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;
        });
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能更新注册码?

nem*_*esv 6

他们RegisterType在这个PR 中更改了 的签名,现在ITypeLifetimeManager使用LifetimeManager.

HierarchicalLifetimeManager目前正在实施ITypeLifetimeManager的界面让你只需要更新lifetimeManager您的参数RegisterMediator方法:

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