如何从外部模块覆盖 Angular 2 提供程序

Ewa*_*der 3 service dependency-injection angular

我有一个单独的LocalizationModule包含LocaleService它的defaultLanguage依赖项:

import { Injectable } from '@angular/core';

@Injectable()
export class LocaleService {
    constructor(defaultLanguage: string) {
        ...
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

所以现在我必须提供工厂来在注入器尝试解决它时创建此依赖项:

let localeServiceFactory = () => {
    return new LocaleService('en-US');
};

export let localeServiceProvider = {
    provide: LocaleService,
    useFactory: localeServiceFactory
};
Run Code Online (Sandbox Code Playgroud)

我在我的LocalizationModule

import { NgModule } from '@angular/core';

@NgModule({
    providers: [
        i18nServiceProvider
    ]
})
export class LocalizationModule { }
Run Code Online (Sandbox Code Playgroud)

这被捆绑为一个库并打包到 npm 注册表中。现在我想在我的许多应用程序中使用这个模块,但我必须能够配置默认语言。如何使用我自己的提供程序覆盖 i18nServiceProvider?

Gün*_*uer 5

AppModule直接添加到的提供程序始终覆盖导入模块中的提供程序。

@NgModule({
  imports: [LocalizationModule],
  providers: [localeServiceProvider],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)