我有一个ErrorModule(eager)配置如下:
export const CONFIG = new InjectionToken<ErrorConfig[]>('Module errors configuration.');
@NgModule({
imports: [... ]
})
export class ErrorModule {
static forRoot(config: ErrorConfig): ModuleWithProviders {
return {
ngModule: ErrorModule,
providers: [
ErrorService,
{ provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
{ provide: CONFIG, useValue: config, multi: true }
]
};
}
static forChild(config: ErrorConfig): ModuleWithProviders {
return {
ngModule: ErrorModule,
providers: [
{ provide: CONFIG, useValue: config, multi: true }
]
};
}
}
核心模块然后导入 ErrorModule
,如下所示:
@NgModule({
imports: [
ErrorModule.forRoot(ERROR_CONFIG)
], ...
Lazy 加载子功能模块:
@NgModule({
imports: [
ErrorModule.forChild(ERROR_CONFIG_CHILD)
], ...
I would like to see both configurations ERROR_CONFIG and ERROR_CONFIG_CHILD injected into ErrorService defined in ErrorModule :
@Injectable
export class ErrorService {
constructor(@Inject(CONFIG) private readonly errorConfigs: ErrorConfig[])
}
但是服务的 errorConfigs
(在构造函数中)只包含在 core.module
中定义的 CONFIG
- 在 forRoot()
函数中定义的那个(具有一个元素的数组) .
已加载并初始化了延迟功能模块,并调用 ErrorModule.forChild(...)
当核心模块的 CONFIG
注入令牌可用时, ErrorService
已经及时构建是有意义的 - 功能模块尚未加载 .
我还尝试在构造函数之外使用Angular Injector
导入 CONFIG
( ErrorService
中的方法),结果相同 .
const configs: any[] = injector.get(CONFIG); // returns only root CONFIG
所以我的问题是:是否有可能以某种方式访问应用程序模块中的惰性模块提供的提供程序? (在应用程序的根注入器中访问它?)