Зависимости модуля - PullRequest
       63

Зависимости модуля

0 голосов
/ 04 февраля 2019

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

  1. Прежде всего, я должен создать отдельный модуль LoggerModule только для этого:

    builder.RegisterType <'MyLogger> (). As <' ILogger> ();

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

Еще одна вещь: как насчет других моих модулей, которые регистрируют сервисы, для которых требуется ILogger?Должен ли я просто предположить, что ILogger уже зарегистрирован и просто c.Resolve <'ILogger> (), или я должен зарегистрировать его снова, чтобы у каждого модуля были зарегистрированы все необходимые зависимости?

Могу ли ясоздать модуль, который регистрирует другие модули?

Я пытался найти ответы на них, но нашел только темы, которые были близки, но не совсем касались моей проблемы.

1 Ответ

0 голосов
/ 04 февраля 2019

Думайте о модулях как о транспортных средствах для конфигурации, а не как о компонентах вашего приложения.Они существуют для настройки контейнера с компонентами, от которых будет зависеть ваше приложение.Имея это в виду:

  1. Конечно.Нет причин, по которым модуль не должен существовать для одной цели (например, для настройки регистрации в контейнере).Однако зачастую ведение журнала является настолько фундаментальным сервисом, что обычно он «встроен» в корень (или оболочку) приложения.
  2. Другие компоненты должны просто предполагать, что ведение журнала доступно и что это ответственность кого-то другогонастроить это.Это суть внедрения зависимости - если требуемые сервисы недоступны, ваше приложение не может работать.
  3. Это технически возможно, но я бы не стал этого делать.Постарайтесь думать о модулях как о независимых и не зависящих друг от друга.В сложных приложениях возможно, что порядок , в котором модули загружаются при запуске, важен, но я считаю, что детали реализации, которые не должны влиять на архитектурные абстракции.
...