2016-11-28 9 views
9

次のクラスでは、httpオブジェクトを挿入するためにAngular 2が通常の依存関係注入を使用するようにhttp依存関係を抽象化したいと考えています。角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(private http: Http) { 
    this.collection = new MyCollectionView<ITestRow>('/some/endpoint', http); 
    } 
} 

を記述する必要が

class MyClass { 
    private collection: MyCollectionView<ITestRow>; 

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

私の現在の実装でインスタンス化するにはng2依存性注入とカスタム引数をコンストラクタに組み合わせます。私は依存性注入部分を処理する何らかの種類の工場機能が必要だと思っていますが、今まで私は運がありませんでした。特にクラスではジェネリックを使用しているためです。私がここに従うことができるベストプラクティスはありますか?

単体テストでは、代わりにMockBackendでDIを解決できることに注意してください。

stackoverflowでthis questionが見つかりましたが、そのmost upvoted answerは、引数が動的でなければならないため、IMHOでは使用できません。

答えて

7

依存性注入(DI)は、DIによって作成されたクラスに対してのみ機能します。 new Xxx()でクラスを作成すると、DIは発生しません。

インスタンスがDIによって作成された場合、独自のパラメータを渡すことはできません。
DIがそれらを挿入できるようにするには、これらのパラメータのプロバイダを作成する必要があります。

あなたがしていることは正しい方法です。

+1

確認のおかげで感謝します。このクラスは常に手動で構築され、依存関係の注入を介さずにそのままそのまま残します。 :) – dotcs

0

私が知る限り、ng2依存性注入とカスタム引数をコンストラクタに組み合わせることはできません。

角度4ではこれを行うことができます。私の答えはこちらhttps://stackoverflow.com/a/46813768/586609

関連する問題