Наша команда создала приложение DDD, которое имеет четко определенный уровень сервисов приложений, построенный как «API» системы. Он объединяет все, начиная с домена и инфраструктуры, для выполнения общих задач. В качестве ввода / вывода он не использует ничего, кроме DTO, поэтому домен никогда не выходит за пределы этого уровня.
Теперь мы хотим добавить в микс контейнер для внедрения зависимостей и столкнулись с некоторыми трудностями. У нас есть два клиентских приложения, которые используют службы приложений для выполнения своей работы: приложение MVC 2 и приложение службы Windows. Традиционно весь код конфигурации для работы с внедрением зависимостей помещается в файл global.asax в проекте mvc, чему я видел множество примеров. Проблема в том, что регистрационный код IOC затем дублируется в службе Windows и немного изменяется для этой платформы.
У меня проблема в том, что DI требует, чтобы клиентское приложение знало, что и как регистрировать, что также требует, чтобы клиентское приложение имело ссылки на уровни домена и инфраструктуры. Вся идея создания уровня сервисов приложений заключалась в том, что это единственное, о чем клиенты должны знать и с чем разговаривать. Мое предложенное решение состояло в том, чтобы создать «Службу зависимостей» на уровне службы моего приложения, которую клиенты будут вызывать один раз, и она будет настраивать контейнер DI, поскольку он знает, что требуется. У него также будут методы, позволяющие клиентскому приложению регистрировать собственные дополнительные зависимости. Например, проект MVC зарегистрирует свою фабрику контроллеров, а служба Windows зарегистрирует свой класс запуска. Я хотел знать, необычно ли это или я ошибаюсь с этой идеей. Кто-нибудь еще сталкивался с этой проблемой раньше?