Каждому из модулей требуется служба хранилища BLOB-объектов. Для этой службы хранения BLOB-объектов у меня есть интерфейс IBlobStorage:
Код: Выделить всё
public interface IBlobStorage
{
void Save(string name, byte[] content);
Task Read(string name);
void Remove(string name);
}
Конкретные реализации требуют некоторой информации в своих конструкторах, например IOptions со строкой подключения.
Код: Выделить всё
IBlobStorage
Каждый модуль отвечает за регистрацию своих собственных зависимостей. Причина этого в том, что я хочу иметь возможность извлекать каждый модуль в отдельный развертываемый блок с как можно меньшим количеством изменений.
Суть вопроса в том, что должна быть возможность настройте каждый модуль для использования другого экземпляра учетной записи хранения. Это означает, что мне нужно иметь возможность зарегистрировать реализацию IBlobStorage для каждого модуля и разрешить реализацию с правильными параметрами для соответствующего модуля (примечание: контроллеры ASP.NET также являются частью модулей, которым они принадлежат; возможно, это поможет решить проблему).
Мне хотелось бы сделать это, чтобы модули ничего не знали о работе в монолите.Сейчас я играю с Autofac, так как альтернатива встроенному DI-контейнеру (в частности, возможность регистрировать зависимости как Keyed звучит многообещающе), но это похоже на большую работу, и мне интересно, есть ли более простое решение, которого я не видел пока.
Кто-нибудь сталкивался с подобным? Буду признателен за любые указания в правильном направлении.
Обновление. Я создал минимальный пример, чтобы проиллюстрировать свою проблему: https: //github.com/tnotheis/ModularMonolith
Запустите проект ModularMonolith и выполните запрос GET к https://localhost:7222/A и https://localhost: 7222/Б соответственно.
Ожидаемое поведение заключается в том, что /A возвращает «Это данные для «ModuleA»», а /B возвращает «Это данные для «ModuleB».
Вместо этого оба они возвращают «Это данные для «ModuleB»», поскольку ModuleB регистрируется после ModuleA, что «переопределяет» регистрацию IModuleSpecificService.>
Подробнее здесь: https://stackoverflow.com/questions/762 ... -injection