В какой сборке должен находиться настроенный модуль Autofac?

У меня есть приложение С #, настроенное так:

[Assembly-ConsoleApp] --References--> [Assembly-Domain] 
                                               /
[Assembly-FileAccess] --References-->---------/

По сути, большинство моих интерфейсов и несколько конкретных классов находятся в сборке Domain, а многие конкретные реализации находятся в сборке FileAccess. Сборка ConsoleApp использует сборку домена без ссылок на сборку FileAccess.

Я создал модуль Autofac FileAccess для подключения реализаций FileAccess к интерфейсам домена вместе с любыми конкретными классами непосредственно внутри сборки домена. У меня вопрос, куда поставить этот модуль. С точки зрения передовой практики, должен ли модуль находиться в сборке FileAccess (что потребовало бы от меня добавления ссылки / зависимости на сборки autofac) или он должен входить в сборку ConsoleApp (который использует модуль и уже имеет зависимость от autofac)? Или будет иметь смысл совершенно отдельная сборка, в которой есть только данный модуль?

Спасибо


person Jason Down    schedule 22.11.2011    source источник


Ответы (1)


На контейнер следует ссылаться только из корня композиции приложения, который в вашем case означает сборку ConsoleApp.

Это гарантирует, что сборки, содержащие логику приложения, не будут зависеть от какого-либо конкретного контейнера DI.

Вы также можете реализовать модуль в отдельной сборке и загрузить его из корня композиции, но поскольку эта сборка (ConsoleApp) все еще нуждается в ссылке на Autofac, от этого мало что можно получить. Это немного зависит от рассматриваемого сценария, но если вы не создаете приложение ISV, которое поставляется как часть (виртуально) упакованного программного обеспечения для многих неконтролируемых клиентов, усилия редко окупаются.

person Mark Seemann    schedule 22.11.2011
comment
Спасибо, Марк! Это то, что я решил, но я просто хотел быть уверенным. Я все еще новичок в использовании контейнеров (и использовании правильного внедрения зависимостей, если на то пошло). - person Jason Down; 22.11.2011