在AngularFireAuth的提供程序(configuration)上使用forwardRef()解决此循环依赖问题。具体而言,在Firebase服务中,您可以这样写:
import { Injectable, forwardRef } from '@angular/core'; import { AngularFireAuth } from '@angular/fire/auth'; import { Firebase } from '@firebase/app-types';
@Injectable({ providedIn: 'root', }) export class FirebaseService { firebase: Firebase;
constructor( @Inject(forwardRef(() => AngularFireAuth)) private auth: AngularFireAuth ) { this.firebase = (window as any).firebase; }
loginWithFacebook() { return this.auth.signInWithPopup(new this.firebase.auth.FacebookAuthProvider()); } }
这里使用@ Inject(forwardRef(())使Angular在遇到此类循环引用时能够解析依赖项。
此外,还可以将FirebaseService作为AngularFireAuth的提供程序之一,如下所示:
import { Injectable } from '@angular/core'; import { AngularFireAuth } from '@angular/fire/auth'; import { Firebase } from '@firebase/app-types';
@Injectable({ providedIn: 'root', deps: [AngularFireAuth], useFactory: (auth: AngularFireAuth) => new FirebaseService(auth), }) export class FirebaseService { firebase: Firebase;
constructor(private auth: AngularFireAuth) { this.firebase = (window as any).firebase; }
loginWithFacebook() { return this.auth.signInWithPopup(new this.firebase.auth.FacebookAuthProvider()); } }
这种方法可以将FirebaseService视为AngularFireAuth的依赖项之一,从而解决循环依赖问题。