#typescript #dependency-injection #inversion-of-control #inversifyjs
#typescript #внедрение зависимостей #инверсия управления #inversifyjs
Вопрос:
Извините, если название расплывчатое..
У меня есть следующие реализации интерфейса ILogProvider
: MultiLogProvider
, LogInjector
, AppInsightsLogger
, и ConsoleLogger
У меня также есть класс DeviceInfoManager
..
Ожидаемое поведение:
-
MultiLogProvider принимает в массив
ILogProvider
, в данном случае,AppInsightsLogProvider
иConsoleLogger
-
MultiLogProvider
вводится вLogInjector
иDeviceInfoManager
(к вашему сведению,LogInjector
имеет зависимость отDeviceInfoManager
, отсюда и сложность) -
Все, что еще запрашивает
ILogProvider
, должно получитьLogInjector
Я пробовал несколько разных вариантов .when
, .whenNoAncestorMatches
, и пару других .when*
функций, но в итоге либо получаю циклическую зависимость, либо запрос просто никогда не разрешается из-за какого-то, казалось бы, неопределенного цикла разрешения.
Я совершенно уверен, что эти 2 строки верны:
this.container.bind<ILogProvider>(TYPES.ILogProvider).to(ConsoleLogger).inSingletonScope().whenInjectedInto('MultiLogProvider');
this.container.bind<ILogProvider>(TYPES.ILogProvider).to(AppInsightsLoggingProvider).inSingletonScope().whenInjectedInto('MultiLogProvider');
Чего я не могу понять, так это то, какую .when
функцию использовать для приведенных ниже 2:
this.container.bind<ILogProvider>(TYPES.ILogProvider).to(MultiLogProvider).inSingletonScope().when*????
this.container.bind<ILogProvider>(TYPES.ILogProvider).to(LogInjector).inSingletonScope().when*????
Ценю любую помощь.