Автоматическое разрешение сопоставления коллекции LifetimeScope

#c# #dependency-injection #autofac

#c# #внедрение зависимостей #Автофактор

Вопрос:

Я хочу разрешить IEnumerable всех служб из именованной области, но это не работает, потому что службы также разрешаются из других именованных областей.

Пример

 var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<B>().As<IMyInterface>().InstancePerMatchingLifetimeScope("B");
containerBuilder.RegisterType<A>().As<IMyInterface>().InstancePerMatchingLifetimeScope("A");

IContainer container= containerBuilder.Build();

ILifetimeScope lifetimeScope = container.BeginLifetimeScope("A");
lifetimeScope.Resolve<IEnumerable<IMyInterface>>();
  

выдает DependencyResolutionException: Unable to resolve the type 'ConsoleApp2.B' because the lifetime scope it belongs in can't be located.

Есть ли способ разрешать службы только из текущей области?

Я использую Autofac 6.0.0

Комментарии:

1. Если вы зарегистрируете компонент с параметром InstancePerMatchingLifetimeScope, код среды выполнения будет ожидать найти область жизненного цикла, помеченную той же строкой, в противном случае возникает исключение. Ваш код будет работать, только если вы начнете новую область жизненного цикла с первой, или LifetimeScope lifetimeScope2 = LifetimeScope . BeginLifetimeScope(«B»), а затем вы вызываете Resolve для последнего. Если вы хотите иметь условную регистрацию, вам следует посмотреть на именованные или ключевые параметры.

2. Можете ли вы обновить свой вопрос, чтобы включить версию Autofac, которую вы используете? Это может быть ошибкой.

3. Я добавил версию

Ответ №1:

Уже открыта аналогичная проблема , похоже, вы столкнулись с ошибкой.для этого; Я добавлю к проблеме повторение вашего конкретного случая и обновлю его, чтобы он был помечен как ошибка, а не как улучшение.

На данный момент я не знаю никаких обходных путей для решения этой проблемы. Извините.