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

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

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

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

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

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

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

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

1 ответ

Решение

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

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