Angular2 - 异步依赖注入

时间:2016-11-27 10:09:37

标签: angular 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文件

1 个答案:

答案 0 :(得分:6)

我发现了一个问题。

当我需要返回功能时,我正在从我的工厂返回一个承诺。我也错过了提供者部分的“多”论证。这是更新的工厂,适用于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
    },
]