【发布时间】:2018-08-01 00:40:21
【问题描述】:
这是一个 Angular 6 和 Firestore 应用程序。我正在尝试将 service1 导入 service2 并收到以下错误。
compiler.js Uncaught Error: Can't resolve all parameters for Service1
我已阅读此 Medium article 和此 stackoverflow 帖子,两者都没有提供见解。
这是我的代码。
首先,我在app.module.ts 中导入并列出这两个服务作为提供者
#### app.module.ts ####
import { AuthenticationService } from './authentication.service';
import { UserService } from './user.service';
@NgModule({
...
providers: [
AuthenticationService,
UserService
]
...
})
而service1AuthenticationService就是这个
#### authentication.service.ts ####
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
import { User } from './models/user.model';
import { UserService } from './user.service';
@Injectable({
providedIn: 'root'
})
export class AuthenticationService {
user: Observable<firebase.User>;
constructor(private afAuth: AngularFireAuth,
private router: Router,
public userService: UserService ) {
this.user = afAuth.authState;
}
}
当我将 service1 AuthenticationService 添加到 service2 UserService 的构造函数中时,我得到上面列出的编译器错误。
#### user.service.ts ####
import { Injectable } from '@angular/core';
import * as firebase from 'firebase/app';
import {
AngularFirestore,
AngularFirestoreDocument,
AngularFirestoreCollection
} from 'angularfire2/firestore';
import { Observable } from 'rxjs';
import { User } from './models/user.model';
import { AuthenticationService } from './authentication.service';
@Injectable({
providedIn: 'root',
})
export class UserService {
usersCollection: AngularFirestoreCollection<User>;
users: Observable<User[]>;
username;
constructor(private afs: AngularFirestore,
private authserv: AuthenticationService) {
this.usersCollection = this.afs.collection('users');
this.users = this.usersCollection.valueChanges();
this.authserv.user.subscribe(user => {
if (user != null) {
console.log('Id is: ' + user.uid);
}
});
}
}
我是否在某处遗漏了一些代码?谢谢你。
【问题讨论】:
-
这是不可能的:您需要 UserService 来创建 AuthenticationService,但要创建 UserService,您需要 AuthenticationService。所以这是一个先有鸡还是先有蛋的问题。重构您的服务以避免这种循环依赖。
-
@JBNizet 但是,一个依赖项是可以的,对吗? AuthServ 可以用 UserServ 构建,是吗?但它也不能反过来工作吗?
-
您可以让 UserService 依赖于 AuthenticationService,或者 AuthenticationService 依赖于 UserService,但不能同时依赖于两者,因为这会引入循环依赖:如果不创建另一个服务,就无法创建另一个服务。
-
那是我的问题的答案。谢谢。
标签: angular typescript firebase dependency-injection