2016-02-19 42 views
1

不是應用廣泛依存服務範圍的服務,這個問題是繼續我的最後一個問題 No provider for ObservableDataService應用與引導

所以,我有廣泛的應用服務UploadedTemplatesService必須是單身。這項服務有一個依賴 - ObservableDataService和依賴必須爲singletone UploadedTemplatesService只有一次,但ObservableDataService可以在其他服務也可以使用,而該服務必須在每個時間上彼此服務新對象注入。

必由之路重要的注意事項 - 我想用UploadedTemplatesService路線的鉤子裏也一樣,所以我說來引導.then方法和內部.then添加appRef.injector內AppInjector功能。 AppInjector代碼:

```

export const AppInjector = (injector?: Injector): Injector => { 
    if (injector) { 
     appInjectorRef = injector; 
    } 
    return appInjectorRef; 
}; 

```

所以在那之後,我能得到UploadedTemplatesServiceInjector.get(UploadedTemplateService)方式路線鉤內。

所以,我看了看文檔和tryed寫類似

```

bootatrap(AppComponent, [ 
    provide(UploadedTemplatesService, { 
     useFactory:() => { 
      return new UploadedTemplatesService(new ObservableDataService()); 
     } 
    }) 
]) 

```

但這些代碼拋出新的錯誤:Cannot read property 'getOptional' of undefined

什麼我做錯了?

回答

0
provide(ServiceA, { 
    useValue: new ServiceA(new CollectionService<ServiceADataType>()) 
}) 

工程。那麼,爲什麼useFactory會拋出Cannot read property 'getOptional' of undefined錯誤?

0

我真的不明白你想做些什麼,但如果你想使用useFactory,也有ObservableDataService在依賴注入可用,你應該使用類似的東西:

bootstrap(AppComponent, [ 
    ObservableDataService, 
    provide(UploadedTemplatesService, { 
    useFactory: (dataService: ObservableDataService) => { 
     return new UploadedTemplatesService(dataService) 
    }, 
    deps: [ObservableDataService] 
}) 
); 

這就是說,通過指定UploadedTemplatesServiceObservableDataService提供商在bootstrap水平,你將有單身的這些服務...

+0

沒有,ObservableDataService必須不應用廣泛。只有UploadedTemplateService,它有一個依賴項 - ObservableDataService –

+0

因爲ObservableDataService的每個對象都可以包含他自己的數據。 例如我想創建另一個應用程序範圍的服務BlablablaService,而該服務將自己的數據存儲他的依賴ObservableDataService內。 ObservableDataService - 只是基於rxjs集合 –

+0

好吧,我想我明白你盡力去做。但在這種情況下,ObservableDataService不能參與基於構造函數的dependencyclopédie注入......它似乎是你想要的。你仍然嘗試在你的應用程序的某個地方注入這個服務嗎? –