TypeScript InversifyJS:接口的多个实现的复杂绑定

TypeScript InversifyJS:接口的多个实现的复杂绑定,typescript,dependency-injection,inversion-of-control,inversifyjs,Typescript,Dependency Injection,Inversion Of Control,Inversifyjs,如果标题不清楚,很抱歉 我有以下接口实现ILogProvider: MultiLogProvider,LogInjector,AppInsightsLogger和ConsoleLogger 我还有一个类设备信息管理器 预期的行为是: MultiLogProvider接受一个ILogProvider数组,在本例中, AppInsightsLogProvider和ConsoleLogger MultiLogProvider被注入到LogInjector和deviceinfo-manager(仅供参考

如果标题不清楚,很抱歉

我有以下接口实现
ILogProvider
MultiLogProvider
LogInjector
AppInsightsLogger
ConsoleLogger

我还有一个类
设备信息管理器

预期的行为是:

  • MultiLogProvider接受一个
    ILogProvider
    数组,在本例中,
    AppInsightsLogProvider
    ConsoleLogger

  • MultiLogProvider
    被注入到
    LogInjector
    deviceinfo-manager
    (仅供参考,
    LogInjector
    依赖于
    deviceinfo-manager
    ,因此比较复杂)

  • 任何请求
    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');
    
    谢谢你的帮助

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