[英]Angular2 - asynchronous dependency injection
我使用Angular2 v2.2.3
我用forRoot()函数创建了通用模块,如下所示:
...
public static forRoot(): ModuleWithProviders {
return {
ngModule: CommonsModule,
providers: [
SomeOtherDependency,
{
provide: ConfigService,
useFactory: ConfigFactory,
deps: [Http]
}
]
};
这是我的ConfigFactory:
export function ConfigFactory(http:Http):Promise<ConfigService> {
return http.get('confg/config.json').map(r => {
return new ConfigService(r);
}).toPromise();
}
我也尝试过返回Promise和Observable。
提供程序中定义的SomeOtherDependency需要ConfigService。 问题是Angular没有注入由promise承诺的价值,而是承诺自己。
如何强制angular等待promise以适当的依赖关系解决,然后将其注入其他依赖项?
我尝试了不同的方法,并且总是注入价值是承诺或可观察的。 就像iniector忽略了工厂返回的类型。 我需要在整个应用程序启动之前加载一些json文件
我发现了一个问题。
当我需要返回功能时,我正从工厂返回一个承诺。 我也错过了提供者部分的“多”论证。 这是更新的工厂,与APP_INITIALIZER一起使用:
export function ConfigFactory(config:ConfigService, http:Http):Function {
return () => config.load(http);
}
在模块中:
providers: [
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: ConfigFactory,
deps: [ConfigService, Http],
multi: true
},
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.