Angular 2 - 在构造函数中使用其他参数混合依赖注入

时间:2016-11-28 16:26:22

标签: angular typescript dependency-injection

在下面的类中,我想抽象出http依赖关系,这样Angular 2就会使用普通的依赖注入来注入http对象。

import { Http } from '@angular/http';

class MyCollectionView<T> extends CollectionView {
  constructor(private endpoint: string, private http: Http) {
  }

  // ... implemenation of class ...
}

我想按照以下方式使用该课程:

class MyClass {
  private collection: MyCollectionView<ITestRow>;

  constructor() {
    this.collection = new MyCollectionView<ITestRow>('/some/endpoint');
  }
}

要在我当前的实现中实例化,我必须写

class MyClass {
  private collection: MyCollectionView<ITestRow>;

  constructor(private http: Http) {
    this.collection = new MyCollectionView<ITestRow>('/some/endpoint', http);
  }
}

据我所知,不可能在构造函数中组合ng2依赖注入和自定义参数。我想我需要某种工厂功能来处理依赖注入部分,但到目前为止我没有运气。特别是因为该课程也使用了泛型。我可以在这里找到最佳实践吗?

请注意,在单元测试中,仍然可以使用MockBackend来解析DI。

我在stackoverflow上找到this question,但它的most upvoted answer不能用于恕我直言,因为参数必须是动态的。

2 个答案:

答案 0 :(得分:11)

依赖注入(DI)仅适用于DI创建的类。如果您使用new Xxx()创建类,则不会发生DI。

如果实例是由DI创建的,那么您无法传递自己的参数 您需要为DI创建这些参数的提供程序才能注入它们。

你正在做的是正确的方法。

答案 1 :(得分:0)

  

据我所知,不可能在构造函数中组合ng2依赖注入和自定义参数。

在角度4中你可以做到。请在此处查看我的回答https://stackoverflow.com/a/46813768/586609