Разрешение универсального интерфейса с Autofac

Да, как только Вы присоединились к iPhone Developer Program и заплатили Apple 99$, можно настроить приложения максимум на 100 устройствах на iOS.

31
задан DownChapel 27 July 2009 в 17:28
поделиться

1 ответ

Autofac поддерживает открытые универсальные шаблоны. Вы можете использовать следующий код, если универсальный тип известен во время компиляции:

var builder = new ContainerBuilder();

builder.RegisterGeneric(typeof(SomeInstance1<>))
  .As(typeof(IGenericInterface<>));              

var container = builder.Build();

var instance1 = container.Resolve<IGenericInterface<SubClass1>>();

Assert.IsInstanceOfType(typeof(SomeInstance1<SubClass1>), instance1);

Если параметр типа неизвестен до времени выполнения (что, вероятно, ваш случай, если вы хотите перебирать коллекцию типов), вы можете создать свой тип с помощью MakeGenericType :

        var typeInRuntime = typeof (SubClass1);
        var instance1 = container.Resolve(typeof(IGenericInterface<>).MakeGenericType(typeInRuntime));
66
ответ дан 27 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: