我不明白为什么我在服务中没有收到配置?
这是我的模块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)
]
...
我做错了什么?如何在服务中获取配置,然后初始化配置
答案 0 :(得分:1)
首先使您的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})