I had an angular application with APP_INITIALIZER in app.module.ts, where I loaded from a REST API all lists that I use in the combo-boxes, and that worked fine. I moved all my components to a library, and also the APP_INITIALIZER to the library, but now APP_INITIALIZER does not get called.
In the library’s module I use APP_INITIALIZER as follows:
function initializeApp(generalService: AbstractGeneralService) {
console.log("initializeApp");
return () => generalService.init();
}
const InitProvider = { provide: APP_INITIALIZER, useFactory: initializeApp, deps: [GeneralService], multi: true, }
However, “initializeApp” is never logged in the console.
How can I make APP_INITIALIZER to be called in an angular library?
The project structure is as shown here:
uni-rules-lib.module.ts where the APP_INITIALIZER is used:
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import {
DxDataGridModule,
DxButtonModule,
DxSelectBoxModule,
DxTemplateModule,
DxDateBoxModule,
DxTreeListModule,
DxListModule,
DxTextBoxModule,
DxFormModule,
DxTextAreaModule,
DxCheckBoxModule,
DxFileUploaderModule,
DxNumberBoxModule,
DxPopupModule,
DxTagBoxModule,
DxPieChartModule,
DxChartModule
} from 'devextreme-angular';
import { UniRulesLibComponent } from './uni-rules-lib.component';
import { CboCorrespodentDynamicComponent } from './components/payments/cbo-correspondent.component';
import { AbstractRuleService } from './services/abstract.rule.service';
import { AbstractRuleConditionService } from './services/abstract.rule-condition.service';
import { AbstractRuleFieldService } from './services/abstract.rule-field.service';
import { AbstractRuleTypeService } from './services/abstract.rule-type.service';
import { AbstractGeneralService } from './services/abstract.general.service';
import { RuleService } from './services/rule.service';
import { RuleConditionService } from './services/rule-condition.service';
import { RuleFieldService } from './services/rule-field.service';
import { RuleTypeService } from './services/rule-type.service';
import { GeneralService } from './services/general.service';
import { MockRuleService } from './services/mock.rule.service';
import { MockRuleConditionService } from './services/mock.rule-condition.service';
import { MockRuleTypeService } from './services/mock.rule-type.service';
import { MockGeneralService } from './services/mock.general.service';
import { CommonModule } from '@angular/common';
import { Rules1Component } from './components/rule-engine/rules/rules1.component';
import { Rules2Component } from './components/rule-engine/rules/rules2.component';
import { Rules1DetailsComponent } from './components/rule-engine/rules/rules1.details.component';
import { Rules2DetailsComponent } from './components/rule-engine/rules/rules2.details.component';
import { RuleFieldsComponent } from './components/rule-engine/rule-fields/rule-fields.component';
import { RuleGroupsComponent } from './components/rule-engine/rule-groups/rule-groups.component';
import { RuleResultEntityComponent } from './components-old/rule-result-entities/rule-result-entities.component';
import { RuleResultEntityFieldsComponent } from './components/rule-engine/rule-result-entity-fields/rule-result-entity-fields.component';
import { RuleBuiltInFunctionsComponent } from './components/rule-engine/rule-built-in-functions/rule-built-in-functions.component';
import { RuleBuiltInFunctionParamsComponent } from './components/rule-engine/rule-built-in-functions/rule-built-in-function-params.component';
import { RuleTypeComponent } from './components-old/rule-types/rule-types.component';
import { AlertComponent } from './components/alert/alert.component';
import { ApiRuleAssociationComponent } from './components-old/api-rule-associations/api-rule-associations.component';
import { CboFinancialInstitutionComponent } from './components-old/cbo-financial-institution/cbo-financial-institution.component';
import { CboPaymentServiceDirectoryComponent } from './components-old/cbo-payment-service-directory/cbo-payment-service-directory.component';
import { CboMessageTypeComponent } from './components-old/cbo-message-types/cbo-message-types.component';
import { CboPaymentServicesFiComponent } from './components-old/cbo-payment-servicefi/cbo-payment-servicefi.component';
import { CboRmaDynamicComponent } from './components/payments/cbo-rma.component';
import { CboCutOffComponent } from './components-old/cbo-cut-offs/cbo-cut-offs.component';
import { CboCorrespondentComponent } from './components-old/cbo-correspondent/cbo-correspondent.component';
import { CboPaymentServiceComponent } from './components-old/cbo-payment-service/cbo-payment-service.component';
import { CboCurrenciesFiComponent } from './components-old/cbo-currenciesfi/cbo-currenciesfi.component';
import { CboCurrenciesFiDynamicComponent } from './components/payments/cbo-currenciesfi.component';
import { CboFinancialInstitutionDynamicComponent } from './components/payments/cbo-financial-institution.component';
import { CboPaymentServiceDirectoryDynamicComponent } from './components/payments/cbo-payment-service-directory.component';
import { CboPaymentServiceDynamicComponent } from './components/payments/cbo-payment-service.component';
import { CboCutOffDynamicComponent } from './components/payments/cbo-cut-offs.component';
import { CboPaymentServicesFiDynamicComponent } from './components/payments/cbo-payment-servicefi.component';
import { ApiRuleAssociationsDynamicComponent } from './components/rule-engine/api-rule-associations.component';
import { CboMessageTypesDynamicComponent } from './components/payments/cbo-message-types.component';
import { RuleTypeDynamicComponent } from './components/rule-engine/rule-types.component';
import { RuleResultEntityDynamicComponent } from './components/rule-engine/rule-result-entities.component';
import { RuleFieldsDynamicComponent } from './components/rule-engine/rule-fields-tree.component';
import { RuleGroupsDetailComponent } from './components/rule-engine/rule-groups/rule-groups-detail.component';
import { RuleResultEntityFieldsDynamicComponent } from './components/rule-engine/rule-result-entity-fields-tree.component';
import { RuleGroupActionModalComponent } from './components/rule-engine/rule-groups/rule-group-action-modal.component';
const routes: Routes = [
{
path: '', component: UniRulesLibComponent, children: [
{ path: 'rulegroups', component: RuleGroupsComponent },
{ path: 'rules', component: Rules1Component },
{ path: 'rules2', component: Rules2Component },
{ path: 'ruletypes', component: RuleTypeComponent },
{ path: 'rulefields', component: RuleFieldsComponent },
{ path: 'rulebuiltinfunctions', component: RuleBuiltInFunctionsComponent },
{ path: 'ruleresultentities', component: RuleResultEntityComponent },
{ path: 'ruleresultentityfields', component: RuleResultEntityFieldsComponent },
{ path: 'apiruleassociations', component: ApiRuleAssociationComponent },
{ path: 'cbofinancialinstitution', component: CboFinancialInstitutionComponent },
{ path: 'cbopaymentservicedirectory', component: CboPaymentServiceDirectoryComponent },
{ path: 'cbopaymentservicesfi', component: CboPaymentServicesFiComponent },
{ path: 'cbomessagetypes', component: CboMessageTypeComponent },
{ path: 'cbormas', component: CboRmaDynamicComponent },
{ path: 'cbocutoffs', component: CboCutOffComponent },
{ path: 'cbocorrespondents', component: CboCorrespondentComponent },
{ path: 'cbopaymentservices', component: CboPaymentServiceComponent },
{ path: 'cbocurrenciesfi', component: CboCurrenciesFiComponent },
{ path: 'ruletypesdynamic', component: RuleTypeDynamicComponent },
{ path: 'cbofinancialinstitutionsdynamic', component: CboFinancialInstitutionDynamicComponent },
{ path: 'cbopaymentservicedirectoriesdynamic', component: CboPaymentServiceDirectoryDynamicComponent },
{ path: 'cbocorrespondentsdynamic', component: CboCorrespodentDynamicComponent },
{ path: 'cbopaymentservicesdynamic', component: CboPaymentServiceDynamicComponent },
{ path: 'cbocurrenciesfidynamic', component: CboCurrenciesFiDynamicComponent },
{ path: 'cbocutoffsdynamic', component: CboCutOffDynamicComponent },
{ path: 'cbopaymentservicesfidynamic', component: CboPaymentServicesFiDynamicComponent },
{ path: 'cbormasdynamic', component: CboRmaDynamicComponent },
{ path: 'cbomessagetypesdynamic', component: CboMessageTypeComponent },
{ path: 'apiruleassociationsdynamic', component: ApiRuleAssociationsDynamicComponent },
{ path: 'ruleresultentitiesdynamic', component: RuleResultEntityDynamicComponent },
{ path: 'rulefieldsdymamic', component: RuleFieldsDynamicComponent },
{ path: 'ruleresultentityfieldsdynamic', component: RuleResultEntityFieldsDynamicComponent }
]
}
];
const ApiProviders = [
{ provide: AbstractRuleService, useClass: RuleService },
{ provide: AbstractRuleConditionService, useClass: RuleConditionService },
{ provide: AbstractRuleFieldService, useClass: RuleFieldService },
{ provide: AbstractRuleTypeService, useClass: RuleTypeService },
{ provide: AbstractGeneralService, useClass: GeneralService }
];
const MockProviders = [
{ provide: AbstractRuleService, useClass: MockRuleService },
{ provide: AbstractRuleConditionService, useClass: MockRuleConditionService },
{ provide: AbstractRuleTypeService, useClass: MockRuleTypeService },
{ provide: AbstractGeneralService, useClass: MockGeneralService }
];
function initializeApp(generalService: AbstractGeneralService) {
console.log("initializeApp");
return () => generalService.init();
}
const InitProvider = { provide: APP_INITIALIZER, useFactory: initializeApp, deps: [GeneralService], multi: true, }
// @dynamic
@NgModule({
declarations: [
UniRulesLibComponent,
Rules1Component,
Rules2Component,
Rules1DetailsComponent,
Rules2DetailsComponent,
RuleFieldsComponent,
RuleGroupsComponent,
RuleResultEntityComponent,
RuleResultEntityFieldsComponent,
RuleBuiltInFunctionsComponent,
RuleBuiltInFunctionParamsComponent,
RuleTypeComponent,
AlertComponent,
ApiRuleAssociationComponent,
CboFinancialInstitutionComponent,
CboPaymentServiceDirectoryComponent,
CboMessageTypeComponent,
CboPaymentServicesFiComponent,
CboRmaDynamicComponent,
CboCutOffComponent,
CboCorrespondentComponent,
CboPaymentServiceComponent,
CboCurrenciesFiComponent,
CboCurrenciesFiDynamicComponent,
CboCorrespodentDynamicComponent,
CboFinancialInstitutionDynamicComponent,
CboPaymentServiceDirectoryDynamicComponent,
CboPaymentServiceDynamicComponent,
CboCutOffDynamicComponent,
CboPaymentServicesFiDynamicComponent,
ApiRuleAssociationsDynamicComponent,
CboMessageTypesDynamicComponent,
RuleTypeDynamicComponent,
RuleResultEntityDynamicComponent,
RuleFieldsDynamicComponent,
RuleGroupsDetailComponent,
RuleResultEntityFieldsDynamicComponent,
RuleGroupActionModalComponent
],
imports: [
RouterModule.forChild(routes),
CommonModule, /* for *ngIf */
DxDataGridModule,
DxButtonModule,
DxSelectBoxModule,
DxTemplateModule,
DxDateBoxModule,
DxTreeListModule,
DxListModule,
DxTextBoxModule,
DxFormModule,
DxTextAreaModule,
DxCheckBoxModule,
DxFileUploaderModule,
DxNumberBoxModule,
DxPopupModule,
DxTagBoxModule,
DxPieChartModule,
DxChartModule,
],
exports: [
UniRulesLibComponent,
],
providers: [
...ApiProviders,
// ...MockProviders,
InitProvider,
],
})
export class UniRulesLibModule { }
app-routing.module.ts:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: 'uni-rules', loadChildren: () => import(`uni-rules-lib`).then(m => m.UniRulesLibModule)}
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.module.ts:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { DxDrawerModule, DxListModule, DxPopupModule, DxToolbarModule, DxTreeViewModule } from 'devextreme-angular';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { environment } from '../environments/environment'
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { SettingsComponent } from '../components/settings/settings.component';
@NgModule({
declarations: [
AppComponent,
SettingsComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
DxDrawerModule,
DxListModule,
DxPopupModule,
DxToolbarModule,
DxTreeViewModule,
HttpClientModule
],
providers: [
{ provide: 'environment', useValue: environment }
],
bootstrap: [AppComponent]
})
export class AppModule { }
1