2017-01-19 3 views
1

Solution проекты:Можно ли разрешать зависимости внутри библиотек классов без ссылки на контейнер?

  • ClassLibrary.Abstract
    • имеет много вкусных услуги
  • ClassLibrary.Concrete
    • содержит реализации услуги выше
  • MvcWebApp
    • ссылки классов выше
    • содержит состав корня

Все регистрируется в корневом каталоге композиции, так MvcWebApp явно ссылается контейнер, в моем случае это Autofac но я не думаю, что это имеет значение.

Вопрос: Что такое правильный способ (если есть какая-либо) для разрешения службы во время выполнения в библиотеках классов без добавления ссылки на контейнер везде в растворе, в то время как еще в состоянии контролировать всю жизнь сферу?

+0

Можете ли вы подробно рассказать о том, почему вам нужно лениво разрешить случай? – Steven

+0

См. [Почему нам нужен шаблон шаблона для заводских образцов?] (Http://stackoverflow.com/a/2280289/181087) – NightOwl888

+0

@steven действия, инициируемые пользовательским интерфейсом, будут использовать разные службы (например, блоки lego) в зависимости от параметров –

ответ

0

Если услуга необходима востановить-реализация

  • служба может создать сам
    • (а), вызвав конкретный конструктор востановить (без МОК/ди востановить)
    • (b) попросив контейнер сделать это.
    • (c) есть какая-либо фабрика или сервисный локатор, о которых служба может спросить.
  • (d) служебный конструктор имеет параметры/свойства для требуемой под-службы. Существует один модуль инициализации, который соединяет все необходимые службы, вызывая конструкторы с параметрами.

Ваш вопрос: можно ли избежать (б)?

Если это важно для ленивой решимости во время выполнения вы должны сделать (с)

Я предпочитаю (d), но это не отложенная загрузка.

Вы хотите, чтобы ваша библиотека создала службу сама по себе, и lib не должен иметь ссылку на ваш ioc-контейнер autofac.

так что вы должны скрывать autofac за factoryInterface методами createService<T> и releaseService<T>

Lib знает Интерфейс

ваш factoryClass реализует factoryInterface с помощью autofac.

Смежные вопросы