我目前挖掘到DI在角2.我使用的是通用的亞型混凝土的數據類型是這樣實現REST客戶端外:角2進樣依賴構造
class RESTClient<T>{
constructor() {
var inj = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]);
this.http = inj.get(Http);
this.conf = RESTConfiguration;
}
}
class BookClient extends RESTClient<Book>{
constructor(){
// since I dont want to inject the HTTP Providers here, I'm using a custom injector in the super class
super();
}
}
class WriterClient extends RESTClient<Writer>{
...
...
}
所以,按照我的理解,有將是由超類REST服務注入的所有RESTClient之間共享的一個http服務。
現在我想有一個RESTConfiguration類這樣:
@Injectable()
export class RESTConfiguration {
get baseURL() {
return this._baseURL;
}
set baseURL(value) {
alert("sets value to"+value);
this._baseURL = value;
}
private _baseURL;
}
應該在主應用程序被配置爲這樣:
initializeApp(){
this.restconf.baseURL = "http://localhost:3004/";
}
bootstrap(MyApp, [RESTConfiguration]).then();
我現在想知道如何注入一個單我的RESTConfiguration實例放入RESTService類中,而不將它傳遞給我想保持無參數的構造函數,以減少代碼重複並避免使用typescript中泛型的問題。
在上面的例子中(第一個代碼片段)我試圖使用我創建的ReflectiveInjector注入我的配置,它爲我提供了一個自定義配置實例。
我想到了幾個解決方案:
獲取訪問應用程序「全球噴油器」使用服務或一些靜態類屬性
實施額外的單邏輯爲使一個可用的我配置
尋找在構造函數外部使用角度本地注入方法的方法?
在我的思維中是否存在錯誤或者我濫用了DI框架?
看起來像一個dup http://stackoverflow.com/questions/39038791/inheritance-and-dependency-injection/39038814?noredirect = 1#comment65548939_39038814 –
在閱讀上面的鏈接問題之後,我非常感受作者 - 我傾向於使用他的「髒黑客」來通過全局注入器 - 我絕對不想在〜 20-30課。任何方式來解決這個問題?如何使用自定義注入器如上所示?然後,我可以直接將配置附加到我的服務中,或者只是將其設置爲一個簡單的靜態類... – hakkurishian
這會創建一個獨立的注入器。此自定義注入器不會返回任何模塊中註冊的提供者以及爲這些提供者創建的實例。您可以按照鏈接問題的答案來做 - 將您的Angular2應用程序的注入器傳遞給周圍,並從該注入器獲取服務。 –