Извините, если заголовок расплывчатый.
У меня есть следующие реализации интерфейса ILogProvider
:
MultiLogProvider
, LogInjector
, AppInsightsLogger
и ConsoleLogger
У меня тоже есть класс DeviceInfoManager
..
Ожидаемое поведение:
MultiLogProvider принимает массив ILogProvider
, в данном случае,
AppInsightsLogProvider
и ConsoleLogger
MultiLogProvider
вводится в LogInjector
и DeviceInfoManager
(к вашему сведению, LogInjector
зависит от DeviceInfoManager
, отсюда и сложность)
Все остальное, запрашивающее ILogProvider
, должно получить LogInjector
Я пробовал несколько различных вариантов .when
, .whenNoAncestorMatches
и пару других .when*
функций, но я либо получаю циклическую зависимость, либо запрос просто никогда не разрешается из-за некоторого, казалось бы, неопределенного разрешения цикл. * 1 042 *
Я вполне уверен, что эти две строки верны:
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*????
Ценю любую помощь.