在引导程序中使用NOT应用程序范围的依赖服务的应用程序范围服

时间:2016-02-19 13:02:13

标签: angular

这个问题仍然是我的最后一个问题 No provider for ObservableDataService

所以,我有应用程序范围的服务UploadedTemplatesService,它必须是单例。该服务有一个依赖项 - ObservableDataService,该依赖项必须只为该单一作品UploadedTemplatesService创建一次,但ObservableDataService也可以在其他服务中使用,并且该服务必须为其他服务注入每次都有新的对象。

必须要注意 - 我也想在Route钩子里面使用UploadedTemplatesService,所以我添加到bootstrap .then方法并在.then里面添加appRef.injector AppInjector函数。 AppInjector代码:

```

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

```

所以在那之后,我可以像UploadedTemplatesService那样在Route钩子中获得Injector.get(UploadedTemplateService)

所以,我看了一下文档并尝试编写类似

的内容

```

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

```

但该代码会抛出新错误:Cannot read property 'getOptional' of undefined

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我真的不明白你尝试做什么但是如果你想在依赖注入中使用useFactory并且ObservableDataService可用,你应该使用类似的东西:

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

也就是说,通过在UploadedTemplatesService级别指定ObservableDataServicebootstrap个提供商,您将拥有这些服务的单身人士......

答案 1 :(得分:0)

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

有效。那么,为什么useFactory抛出Cannot read property 'getOptional' of undefined错误?