Unity DI容器RegisterType方法将更改从v5.8.x更改为v5.9.x.

问题描述 投票:2回答:1

我在我的.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;
        });
}

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

dependency-injection .net-core unity-container mediatr
1个回答
4
投票

他们在这个RegisterType改变了PR的签名,它现在采取ITypeLifetimeManager而不是LifetimeManager

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

public static IUnityContainer RegisterMediator(this IUnityContainer container, 
                                                    ITypeLifetimeManager lifetimeManager)
{
    return container.RegisterType<IMediator, Mediator>(lifetimeManager)
        ...
}
© www.soinside.com 2019 - 2024. All rights reserved.