Я столкнулся с некоторыми архитектурными проблемами в проекте, в котором я участвую. Проект представляет собой приложение ASP.NET MVC 2, которое опирается на DI и особенно на инжектор конструктора с Unity. Приложение разделено на несколько модулей (каждый модуль представляет собой набор сборок), предоставляющих сервисы другим модулям. Эти сервисы регистрируются в Unity при запуске приложения. Ничего особенного до сих пор. Допустим, у меня есть это (каждый модуль является сборкой для упрощения):
Модуль A, Модуль B.
Модуль A предоставляет сервис IServiceA следующими способами:
IServiceA (Операция1 - Операция2 - Операция3)
ServiceB от ModuleB нуждается в IServiceA от ModuleA, и он получает его путем внедрения конструктора (с конкретной реализацией). Тогда он использует это.
Проблема в том, что модуль A деактивирован (мы проверяем в базе данных, активирован ли модуль для текущего пользователя при запуске приложения), чтобы serviceA не был зарегистрирован в Unity.
Тогда у нас есть исключение во время выполнения, потому что Unity не может найти регистрацию для IServiceA, а ServiceB не может быть создан. Что нормально.
Я хотел бы знать, что есть набор шаблонов или лучшая практика для борьбы с этим. Первым делом я избавился от инъекции конструктора для ServiceB. Но тогда я должен использовать жесткую ссылку на ServiceA, и мне это не нравится или использовать ServiceLocator, что еще хуже. Я не хочу проверять в ModuleB, доступен ли ServiceA или нет, потому что будет много других сервисов, которые я бы проверил и должен иметь дело с кодом, который является чисто инфраструктурным. Я хотел бы, чтобы ServiceB выполнял тот же код, если serviceA доступен или нет (не знаю, если это возможно). Я посмотрел на схему Gateway, но не знаю, поможет ли это мне.
Любая помощь будет оценена.
Спасибо