2016-11-28 45 views
9

Aşağıdaki sınıfta, http bağımlılığını soyutlamak istiyorum, böylece Angular 2, http nesnesini enjekte etmek için normal bağımlılık enjeksiyonunu kullanır.Köşeli 2 - Yapıcıda diğer bağımsız değişkenlerle karıştırılmış bağımlılık enjeksiyonu

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

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

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

ben şöyle sınıfını kullanmak istiyorum:

class MyClass { 
    private collection: MyCollectionView<ITestRow>; 

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

Ben Bildiğim kadarıyla bildiğimiz

class MyClass { 
    private collection: MyCollectionView<ITestRow>; 

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

yazmak zorunda benim şimdiki uygulamada örneklemek için mümkün değildir ng2 bağımlılık enjeksiyonunu ve yapıcıdaki özel argümanları birleştirmek için. Bağımlılık enjeksiyon bölümüyle ilgilenen bir tür fabrika fonksiyonuna ihtiyacım var ama şimdiye kadar hiç şansım olmadı. Özellikle de sınıfın jenerik kullanması nedeniyle. Burada izleyebileceğim en iyi uygulamalar var mı?

Lütfen birim testlerinde DI'yi MockBackend yerine çözümlemek mümkün olduğunu unutmayın.

Stackoverflow'ta this question bulunamadı, ancak most upvoted answer argümanlarının dinamik olması gerektiğinden, IMHO kullanılamaz.

cevap

7

Bağımlılık enjeksiyonu (DI) yalnızca DI tarafından oluşturulan sınıflar için çalışır. new Xxx() ile sınıflar oluşturursanız, DI oluyor.

Örnek, DI tarafından oluşturulduysa, kendi parametrelerinizi geçemezsiniz.
Bu parametreler için, DI'nin bunları enjekte edebilmesi için sağlayıcılar oluşturmanız gerekir.

Yaptığınız şey doğru yoldur.

+1

Doğru, teşekkürler için teşekkürler. Bu sınıf her zaman elle inşa edilecek ve bağımlılık enjeksiyonu ile değil, olduğu gibi bırakacağım. :) – dotcs

0

Bildiğim kadarıyla, ng2 bağımlılık enjeksiyonunu ve yapıcıdaki özel bağımsız değişkenleri birleştirmek mümkün değildir.

Açısal 4'te bunu yapabilirsiniz. Cevabımıma bakın. https://stackoverflow.com/a/46813768/586609