Если бы я правильно понял проблему (и принял во внимание, что трудно спорить о правильном решении, не видя фактического кода), подход был бы таким.
Предположим, у вас есть следующая структура решения:
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
. Также в зависимости от того, какой именно IoC вы используете, вы можете предоставить более очевидную подпись для registerUniqueServiceAction
, чтобы было ясно, что на самом деле нужно.
person
Guru Stron
schedule
02.05.2020
MySharedLibrary.DI
- person Guru Stron   schedule 01.05.2020