2016-02-14 210 views
2

我不知道這是一個錯誤,或者我做錯了什麼(概率後者)。 我想手動實例化一個名爲TodoService的組件。問題與手動依賴注入Angular2

一切都很好第一2個步驟

var myProvider = new Provider(TodosService, { 
    useFactory: (todoAction, http, todoStatsModel, appStore) => { 
    return new todoAction(TodoAction, http, todoStatsModel, appStore) 
}, 
    deps: [TodoAction, Http, TodoStatsModel, AppStore] 
}); 
var injector = Injector.resolveAndCreate([myProvider]); 

但是吹了,當我設法得到它,所以我可以用它

var myTodoService = injector.get(TodosService) 

我做錯了什麼(可能的get )?

enter image description here

+0

我不知道爲什麼你使用自定義注射器。這不應該是必要的。當然有些情況,但如果沒有必要,最好避免它。 –

回答

2
var injector = Injector.resolveAndCreate([myProvider, TodoAction, Http, TodoStatsModel, AppStore]); 

我想你會更好,不要使用使用一個工廠只

var injector = Injector.resolveAndCreate(
    [TodoService, TodoAction, Http, TodoStatsModel, 
    provide(AppStore, {useValue: new AppStore('')} 
    // or 
    // provide(AppStore, {useFactory:() => { 
    //  return new AppStore(''); 
    // }) 
    ]); 
var myTodoService = injector.get(TodosService) 
+0

我現在看到,在您的陳述中,我實際上會得到一個更具描述性的錯誤,表示缺少初始例外:無法解析'AppStore'(?)的所有參數。確保...所以我想我需要解決更多的依賴關係 – born2net

+0

確切地說。只需向提供程序添加「AppStore」構造函數參數類型即可。 –

+0

我想這會導致一個新問題,我的AppStore簽名是:構造函數(store:any);因爲它不是一個Angular組件,只是一個簡單的類,所以它並不真正具有「依賴關係」,只需要傳遞一個值... mmm ....可能嗎? – born2net

0

Tx至君特Zöchbaue誰解決了這個對我來說......他男人!!!

這裏是其他人的代碼:通過注射器

constructor(private appStore:AppStore) { 
    super(); 
} 

private factoryService(){ 
    if (this.service) 
     return; 
    var injector = Injector.resolveAndCreate(
     [ 
      TodosService, 
      TodoAction, 
      HTTP_PROVIDERS, 
      TodoStatsModel, 
      provide(AppStore, {useValue: this.appStore}) 
     ]); 

    this.service = injector.get(TodosService); 
    service.sayHello('Sean'); 
} 

基本上手動創建通過多個依賴(甚至一個香草非組件(類)的AppStore)「TodoService」 Angular2組件和所有... wooof ...!