Providers cannot be changed after the creation of the injector.
You can create a service that provides different instances depending on the state.
@Injectable()
class ProviderService {
constructor(injector:Injector) {}
set firebaseConfig(firebaseConfig) {
let resolvedProviders = ReflectiveInjector.resolve([AngularFireModule.initializeApp(firebaseConfig)]);
this.childInjector = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);
}
get firebase ():AngularFireModule {
return this.childInjector.get(AngularFireModule);
}
}
and then use it like
class MyComponentOrService {
constructor(provider:ProviderService) {}
changeFirebase() {
this.provider.firebaseConfig = ...;
this.fb = this.provider.firebase;
}
doSomething() {
this.fb.xxx();
}
}