Как получить конкретный компонент из контейнера Autofac
Я регистрирую в Autofac несколько классов под одним интерфейсом:
ContainerBuilder.RegisterType<Class1>().As<MyInterface>();
ContainerBuilder.RegisterType<Class2>().As<MyInterface>();
Затем я хочу получить только Class2, как мне это сделать? Я не хочу использовать перечисление, а затем вычислять конкретный тип из контейнера:
//Нежелательный длинный способ
Class2 myClass2 = null;
using(var scope = Container.BeginLifetimeScope())
{
IEnumerable<MyInterface> items = scope.Resolve<IEnumerable<MyInterface>>();
foreach(var item in items)
if(item.GetType() == typeof(Class2))
myClass2 = (Class2)item;
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Если вам нужно вызывать тип конкретно, при этом не теряя возможность получить коллекцию экземпляров по интерфейсу, то надо изменить регистрацию
builder.RegisterType<Class2>().As<MyInterface>().AsSelf();
Class2 item = scope.Resolve<Class2>();