Метод RegisterType контейнера Unity DI прерывает изменения с v5.8.x на v5.9.x - PullRequest
0 голосов
/ 13 февраля 2019

Я использовал Unity DI Container v5.8.4 в моем проекте .NET Core 2.1, и мне нужно было зарегистрировать Mediator объект, и я использовал конфигурацию, предложенную здесь .

Теперь я обновился до v5.9.4 и у меня возникла ошибка, связанная с RegisterType аргументами метода:

Невозможно преобразовать из '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;
        });
}

Что мне нужно сделать, чтобы обновить регистрационный код?

1 Ответ

0 голосов
/ 13 февраля 2019

Они изменили подпись RegisterType в этом PR , и теперь он принимает ITypeLifetimeManager вместо LifetimeManager.

HierarchicalLifetimeManager теперьреализация интерфейса ITypeLifetimeManager, поэтому вам просто нужно обновить параметр lifetimeManager в вашем методе RegisterMediator:

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