我不明白为什么我在服务中没有收到配置?
下面是我的模块ScnApiModule
module.ts
@NgModule({
imports: [
CommonModule
],
declarations: [],
exports: []
})
export class ScnApiModule {
static forRoot(config?: IApiConfig): ModuleWithProviders {
console.log('ScnApiModule', config); // here I get the config
return {
ngModule: ScnApiModule,
providers: [
{provide: 'ApiConfig', useValue: config},
RestService,
...
我的服务
rest.service.ts
@Injectable()
export class RestService {
constructor(@Inject('ApiConfig') config?: IApiConfig) {
console.log('RestService', config); // here I get `undefined`
...
主应用程序模块
app.module.ts
export const CONFIG: IApiConfig = {
apiHost: environment.scnApiLibrary.apiHost,
authHost: environment.scnApiLibrary.authHost,
clientId: environment.scnApiLibrary.clientId,
secret: environment.scnApiLibrary.secret,
};
@NgModule({
...
imports: [
ScnApiModule.forRoot(CONFIG)
]
...
我做错了什么?如何在服务中获取配置,然后初始化配置
发布于 2017-10-18 18:55:58
首先,使您的IApiConfig
可注入,以便任何服务或组件都可以访问它
@Injectable()
export class IApiConfig {
apiHost:string;
authHost:string;
clientId:string;
secret:string;
constructor(init?: Partial<IApiConfig>) {
this.apiHost = init.apiHost;
...
}
}
然后在您的ScnApiModule
中,您将不得不构建一个工厂来提供您的配置
export const apiConfigToken = new InjectionToken<IApiConfig>('apiConfigToken');
export function getapiConfigInjectionToken(config: IApiConfig) {
return new IApiConfig(config);
}
export const APIConfigProvider = {
provide: IApiConfig ,
useFactory: getapiConfigInjectionToken,
deps: [apiConfigToken]
};
改变它的提供方式
export class ScnApiModule {
static forRoot(config?: IApiConfig): ModuleWithProviders {
return {
ngModule: ScnApiModule,
providers: [
{provide: apiConfigToken, useValue: config},
APIConfigProvider,
...
用法
ScnApiModule.forRoot({apiHost: 123,authHost:456})
https://stackoverflow.com/questions/44671240
复制相似问题