【问题标题】:Does Aurelia support injection of multiple members to arrayAurelia 是否支持将多个成员注入到数组中
【发布时间】:2018-04-11 03:00:22
【问题描述】:

Aurelia(确切地说是aurelia-dependency-injection)是否支持向数组注入多个成员(如multi inject feature of InversifyJS)?

例子:

provider-common.ts:

class A { ... }

provider1.ts

let a1 = new A (...)
container.registerInstance(A, a1)

provider2.ts

let a2 = new A (...)
container.registerInstance(A, a2)

consumer.ts

@inject(A)
class B {
  constructor (multipleAInstancesFromDiffirentProviders :Array<A>) {
      // I would expect multipleAInstancesFromDiffirentProviders to contain [a1,a2] (if such a feature is supported)
  }
}

【问题讨论】:

  • 很高兴了解为什么这个问题被否决了。
  • 你能写一个你想做的例子吗?
  • 当然是@FabioLuz。
  • 我认为这是可能的,但我还不知道该怎么做。我将查看源代码并尝试找到一些方法来做到这一点。同时,您可以将数组封装在一个类中,然后注入该类以获取值
  • @FabioLuz 感谢您关注这个问题。封装在这里无济于事。假设 a1 和 a2 是复杂的配置对象。 B 类的构造函数基于它进行一些初始化。如果数组被封装在一个类中(具有方法 addConfigurationObject(config:A)),我们不能保证在调用 A 的构造函数之前添加所有配置对象。可以使用部分配置调用它,例如 {configurationObjects:[a2]}。

标签: javascript dependency-injection aurelia


【解决方案1】:

最好使用All.of(A)

您也可以使用此替代方法:

import { Container } from 'aurelia-framework';

@inject(Container)
class B {
    constructor (container: Container) {
      var multipleAInstancesFromDifferentProviders : Array<A> = container.getAll(A);
    }
}

【讨论】:

    【解决方案2】:

    你可以试试All.of(A):

        import {inject, All} from "aurelia-framework";
    
        @inject(All.of(A))
        class B {
            constructor (multipleAInstancesFromDiffirentProviders :Array<A>) {
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 2012-01-20
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多