2016-11-28 74 views
9

在下面的类中,我想抽象出http依赖性,以便Angular 2使用正常的依赖注入来注入http对象。Angular 2 - 在构造函数中使用其他参数混合依赖注入

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。

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

回答

7

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

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

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

+1

有道理,谢谢你的确认。由于这个类将始终是手动构建的,而不是通过依赖注入来构建,所以我将保持原样。 :) – dotcs

相关问题