Модульный монолит и внедрение зависимостейC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Модульный монолит и внедрение зависимостей

Сообщение Anonymous »

В настоящее время я пытаюсь зарегистрировать зависимости в своем модульном монолите с API ASP.NET Core 7.
Каждому из модулей требуется служба хранилища BLOB-объектов. Для этой службы хранения BLOB-объектов у меня есть интерфейс IBlobStorage:

Код: Выделить всё

public interface IBlobStorage
{
void Save(string name, byte[] content);
Task Read(string name);
void Remove(string name);
}
Существует множество различных реализаций интерфейса, в зависимости от того, какое хранилище BLOB-объектов должно быть предназначено (например, учетная запись хранения Azure, облачное хранилище Google и т. д.).
Конкретные реализации требуют некоторой информации в своих конструкторах, например 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Laravel модульный монолит пользовательский обработчик исключений
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Laravel модульный монолит пользовательский обработчик исключений
    Anonymous » » в форуме Php
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Управление ростом в архитектуре микросервиса: модульный монолит раствором? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Внедрение зависимостей: внедрение IEnumerable> универсальных интерфейсов.
    Anonymous » » в форуме C#
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Внедрение зависимостей: внедрение IEnumerable> универсальных интерфейсов.
    Anonymous » » в форуме C#
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»