TypeScript InversifyJS: сложные привязки для нескольких реализаций интерфейса - PullRequest
0 голосов
/ 11 апреля 2019

Извините, если заголовок расплывчатый.

У меня есть следующие реализации интерфейса ILogProvider: MultiLogProvider, LogInjector, AppInsightsLogger и ConsoleLogger

У меня тоже есть класс DeviceInfoManager ..

Ожидаемое поведение:

  1. MultiLogProvider принимает массив ILogProvider, в данном случае, AppInsightsLogProvider и ConsoleLogger

  2. MultiLogProvider вводится в LogInjector и DeviceInfoManager (к вашему сведению, LogInjector зависит от DeviceInfoManager, отсюда и сложность)

  3. Все остальное, запрашивающее 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*????

Ценю любую помощь.

...