Autofac: выберите реализацию сервиса на основе того, что может быть построено - PullRequest
4 голосов
/ 27 июня 2019

Допустим, у меня есть IService и две реализации ServiceA и ServiceB. Тогда давайте предположим, что ServiceA имеет параметр ClassA в своем конструкторе (среди прочих), а ServiceB имеет параметр ClassB. Я бы тогда хотел:

  1. Зарегистрируйте услуги следующим образом:
containerBuilder.RegisterType<ServiceA>().AsImplementedInterfaces();
containerBuilder.RegisterType<ServiceB>().AsImplementedInterfaces();
  1. Зарегистрируйте экземпляр либо ClassA, либо ClassB (это определяется во время выполнения).
  2. Когда какой-то другой компонент хочет IService, autofac предоставит один базовый , который может быть сконструирован , т. Е. Если у него есть ClassA объект в хранилище, он создаст и предоставит ServiceA и т. Д. .

Как мне этого добиться? Обратите внимание, что ClassA и ClassB не имеют общего интерфейса.

...