Как я могу удалить дублирование в контейнерах Io C для двух почти идентичных приложений? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть два приложения (в одном решении), которые зависят от одной общей библиотеки (отдельный проект). Эта общая библиотека выполняет большую часть работы и принимает некоторые службы в качестве зависимостей интерфейса.

Контейнер My Io C для каждого приложения выглядит идентично, за исключением одной службы, которая должна различаться в двух приложениях. Как я могу минимизировать это дублирование в контейнерах Io C?

1 Ответ

1 голос
/ 02 мая 2020

Если бы я правильно понял проблему (и учел, что трудно найти правильное решение, не увидев реальный код), подход был бы следующим.

Предположим, у вас есть следующая структура решения:

SharedLib(can be just dll/nuget)
   ...
AppOne(refs and DI's shared)
   ...
AppTwo(refs and DI's shared)
   ...

Тогда что вам нужно сделать:

SharedLib
   ...
Shared.DI (refs SharedLib and package with your IoC container, and other stuff if needed)
   ...
AppOne (refs Shared.DI)
   ...
AppTwo (refs Shared.DI)
   ...

В Shared.DI вы создаете метод с именем как RegisterShared, который будет обрабатывать все регистрации и будет вызываться из AppOne и AppTwo. Я бы предложил что-то вроде этого:

public static RegistrationExtensions
{
    public static void RegisterShared(this YourIoCBuilder builder,
       Action<YourIoCBuilder> registerUniqueServiceAction)
    {
         // do the common stuff 
         registerUniqueServiceAction(builder);             
    }
}

Вы можете опустить registerUniqueServiceAction и зарегистрировать необходимый сервис непосредственно перед или после, но лично я предпочитаю более явный API, поэтому было бы очевидно, что этот метод не регистрируется все необходимое для работы SharedLib. Также в зависимости от того, какой именно Io C вы используете, вы можете предоставить более очевидную подпись для registerUniqueServiceAction, чтобы было понятно, что на самом деле нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...