TypeScript InversifyJS:用于接口多种实现的复杂绑定

时间:2019-04-10 21:38:33

标签: typescript dependency-injection inversion-of-control inversifyjs

对不起,标题不清楚。

我有接口ILogProvider的以下实现: MultiLogProviderLogInjectorAppInsightsLoggerConsoleLogger

我还有一个DeviceInfoManager类。.

预期的行为是:

  1. MultiLogProvider接受ILogProvider数组,在这种情况下, AppInsightsLogProviderConsoleLogger

  2. MultiLogProvider被注入到LogInjectorDeviceInfoManager中(仅供参考,LogInjector依赖于DeviceInfoManager,因此很复杂)

  3. 请求ILogProvider的其他任何内容都应获得LogInjector

我尝试了.when.whenNoAncestorMatches和其他几个.when*函数的几种不同变体,但最终要么是循环依赖,要么是请求永远无法解决由于某些看似不确定的分辨率循环。

我很确定这两行是正确的:

this.container.bind<ILogProvider>(TYPES.ILogProvider).to(ConsoleLogger).inSingletonScope().whenInjectedInto('MultiLogProvider');

this.container.bind<ILogProvider>(TYPES.ILogProvider).to(AppInsightsLoggingProvider).inSingletonScope().whenInjectedInto('MultiLogProvider');

我不知道在以下2种情况下将使用什么.when函数:

this.container.bind<ILogProvider>(TYPES.ILogProvider).to(MultiLogProvider).inSingletonScope().when*????

this.container.bind<ILogProvider>(TYPES.ILogProvider).to(LogInjector).inSingletonScope().when*????

感谢任何帮助。

0 个答案:

没有答案