2

我正在为 Angular 2 编写一个库服务,我希望调用应用程序能够提供一些配置。我可以在基类上创建抽象属性,但这会导致很多调用应用程序必须在多个位置定义配置。

在 Angular2 应用程序中,我在主应用程序模块中使用了这样的技术

let config: any = { param1: 'value 1', param2: 'value 2' };

@NgModule({
    providers: [ {provide: 'app.config', useValue: config } ]
})

然后我可以使用 @Inject('app.config') 在需要的地方注入配置。但是,由于我正在编写的库正在定义要扩展的基类,我不想在构造函数中注入这个值,因为它需要调用应用程序注入值并通过 super() 转发它。

我一直在研究 ReflectiveInjector 类,但它需要一个类型而不是字符串。

    let appConfig = ReflectiveInjector.resolve('app.config').get();

我怎样才能做到这一点?

4

2 回答 2

0

我一直在研究 ReflectiveInjector 类,但它需要一个类型而不是字符串。

像这样的东西?

let config: any = { param1: 'value 1', param2: 'value 2' };

let injector: any = ReflectiveInjector.resolveAndCreate([
  {
    provide: 'app.config',
    useValue: config
  }
]);

let configService = injector.get('app.config');

console.log(configService);
于 2016-11-11T12:22:25.560 回答
0

你可以定义一个 OpaqueToken

export const APP_CONFIG = new OpaqueToken('app.config');

并将其用作类型,而不是使用字符串

let appConfig = ReflectiveInjector.resolve(APP_CONFIG).get();

如果我理解正确,您希望在应用程序初始化之前通过单个请求加载一些配置数据,并将其保存在单例中。我强烈建议您查看#37611549 帖子,因为它解释了 APP_INITIALIZER 的使用 - 在应用程序初始化时执行函数,并在函数返回承诺时延迟它提供的内容。

于 2016-11-11T12:25:23.183 回答