Salve a tutti, è tutto il giorno che sbatto la testa su questo argomento, trovando solo soluzioni (online) ormai deprecate.
Io ho il mio app.module.ts:
codice:
[... tutti gli import...]
function loadConfigFactory(configService: AppConfigService) {
return () =>configService.loadJSON();
}
export function initApp(configService: AppConfigService) {
return () =>configService.loadConfigurazione();
}

@NgModule({
    declarations: [
        AppComponent,
        FooterComponent,
        HeaderComponent,
// ToastComponent
    ],
    imports: [
        BrowserModule,
        HttpClientModule,
        NgbModule,
        FontAwesomeModule,
        BrowserAnimationsModule,
ToastrModule.forRoot()
    ],
    providers: [
        AppConfigService,
        { provide:APP_INITIALIZER, useFactory: loadConfigFactory, deps: [AppConfigService], multi:true },
        { provide:APP_INITIALIZER, useFactory: initApp, deps: [AppConfigService], multi:true },
        { provide:HTTP_INTERCEPTORS, useClass: GestoreIntercept, multi:true },
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }
function next(next:any, arg1: (el:any) =>void) {
throw newError('Function not implemented.');
}
ed i due service che dovrebbero essere concatenati. Il primo contiene i metodi per leggere il file di configurazione e il metodo per richiamare una seconda configurazione dal server:
codice:
[... tutti gli import...]
@Injectable({
    providedIn:'root'
})
export class AppConfigService {
static settings: IAppConfig;
static configurazione: Configurazione;
private api: ApiService;
public constructor(private http: HttpClient, api: ApiService) {
this.api=api
    }
loadJSON() {
console.log("loadJSON");
const jsonFile='assets/config/appConfig.json';
return new Observable((subscriber) => {
this.http.get(jsonFile).subscribe({
//success
next: (resp) => {
console.log("passo2");
AppConfigService.settings= <IAppConfig>resp;
subscriber.complete();
                },
// errore
error: (err) => {
// gestisci errore
console.log(err);
subscriber.error();
                }
            });
        })
    }
loadConfigurazione() {
return newObservable((subscriber) => {
this.api.getConfigurazioni().subscribe({
//success
next: (resp) => {
console.log("passo3");
let arrConf=newMap<string, string|number|boolean>();
resp.data.forEach((element: { chiave:string; valore:string|number|boolean; }) => {
arrConf.set(element.chiave, element.valore);
                    });
console.log("passo");
AppConfigService.configurazione=new Configurazione(arrConf);
console.log(AppConfigService.configurazione.getValore("durata"));
subscriber.complete();
                },
// errore
error: (err) => {
// gestisci errore
console.log(err);
subscriber.error();
                }
            });
        })
    }
}
SEGUE...