I am developing a module that suppport forRoot and forChild. Whenever this module is imported with forRoot, forChild some methods of a custom service should be called. It works well for forRoot since I use APP_INITIALIZER, but the factory is not called anymore in the forChild of a lazy loaded module. How can I execute the methods that I have in my factory in the forChild so that it also works with lazy loaded modules? Is there some sort of equivelant of the APP_INITIALIZER for lazy loaded modules or a workaround?
export const TRANSLATION_CONFIGURATION = new InjectionToken<TranslationConfiguration<any>>('');
function initializeAppFactory(config: TranslationConfiguration<any> & { language: Language }, locutus: LocutusService): () => void {
return () => {
if (config.language) {
locutus.registerRoot(config);
return;
}
locutus.registerChild({
scope: config.scope,
loaders: config.loaders
});
};
}
@NgModule({
declarations: [
NgxLocutusComponent,
LocutusDirective,
LocutussPipe
],
imports: [
CommonModule
],
exports: [
NgxLocutusComponent,
LocutusDirective,
LocutussPipe
]
})
export class LocutusModule {
static forRoot<T>(config: TranslationConfiguration<T> & { language: Language }): ModuleWithProviders<LocutusModule> {
return {
ngModule: LocutusModule,
providers: [
{
provide: TRANSLATION_CONFIGURATION,
useValue: config,
},
{
provide: APP_INITIALIZER,
useFactory: initializeAppFactory,
deps: [
TRANSLATION_CONFIGURATION,
LocutusService
],
multi: true
},
]
};
}
static forChild<T>(config: TranslationConfiguration<T>): ModuleWithProviders<LocutusModule> {
return {
ngModule: LocutusModule,
providers: [
{
provide: TRANSLATION_CONFIGURATION,
useValue: config,
},
{
provide: APP_INITIALIZER,
useFactory: initializeAppFactory,
deps: [
TRANSLATION_CONFIGURATION,
LocutusService
],
multi: true
},
]
};
}
}