2016-10-18 4 views
0

У меня есть приложение, которое использует три библиотеки lib1, lib2 и lib3. В каждой из библиотек я реализовал Module, который регистрирует зависимости, реализованные в этой библиотеке.Должны ли модули Autofac регистрировать свои собственные зависимые модули?

Некоторые из этих реализаций имеют свои собственные зависимости, например, lib2 и lib3 могут потребоваться некоторые реализации, существующие в lib1.

Мой вопрос: разрешить ли модуль в lib2 и lib3 регистрировать модуль в lib1 как часть их реализации Load? Будет ли это регистрировать этот модуль дважды, если мое приложение регистрирует модули lib2 и lib3?

Или я не могу позволить модулю зарегистрировать другой модуль, оставив его в приложении с недостатком, что некоторые регистрации могут отсутствовать при запуске?

+0

Этот вопрос касается не того, есть ли библиотеки, зарегистрировавшие свои собственные регистрации. Они не. Они просто предлагают фасад, чтобы помочь в регистрации этих зависимостей, которые будут использоваться корнем композиции. –

ответ

0

Autofac Module - это не более чем фасад для регистрации компонентов. Он не должен вызывать другие модули с целью регистрации реализаций, известных как зависимости от его собственных регистраций, поскольку это свяжет два модуля вместе, увеличивая связь.

Кроме того, если один и тот же модуль зарегистрирован несколько раз, сами регистрации применяются несколько раз, так как Autofac не отслеживает уже зарегистрированные модули. Обычно это не создает проблемы, если корень композиции непреднамеренно аннулирует любые регистрации, предназначенные для переопределения существующих.

1

В общем, должна быть только одна библиотека, содержащая конфигурации. Эта библиотека является начальным проектом, и это место в приложении, где все подключено, обычно называют Composition Root. Как правило, только проекты запуска имеют корневой состав, и только когда несколько проектов запуска в одном решении имеют много дублирующихся регистраций, вы начинаете извлекать этот код в общее место, где эти корни композиций могут повторно использоваться. Но будьте осторожны: вообще Composition Roots should not be reused.

+0

Конечно, но я не повторно использую корни композиции. Я повторно использую фасады, созданные для облегчения регистрации вещей внутри библиотеки. –

1

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

Корень композиции (предпочтительно) уникальное место в приложении, где модули составлены вместе.

Эта концепция поясняется здесь composition root.

Кстати, если ваш регистрационный модуль несколько раз, Autofac будет регистрировать компонентное время мультиплеера. Если у вас должен быть модуль внутри вашей библиотеки, вы должны создать только модуль, который регистрирует компонент библиотеки.

+0

Ну, у меня есть несколько композиционных корней, по одному для каждого приложения в моем решении. Неужели мне не нужно переписывать весь регистрационный код? Если да, то в чем смысл иметь модули вообще? –

+0

Модуль может помочь вам организовать регистрацию. Он также позволяет вам подключаться к уже зарегистрированному компоненту или источнику регистрации, чтобы изменить регистрационное поведение. Дополнительную информацию о модуле * Autofac * см. В http://docs.autofac.org/en/latest/configuration/modules.html –

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