我有一个小问题,似乎是关于依赖注入。我已经做了一个HttpClient服务来验证我的电话,我已经这样说了:
@Injectable()
export class HttpClient {
constructor(private _http: Http, private _cookieService: CookieService, private _loginService: LoginService) {}
...
}
错误来自带有LoginService注入的此文件(如果我删除它,应用程序可以正常工作)。请注意,我已经在其他一些文件中注入了LoginService,并且没有任何问题,并且也正确导入。
错误就是这个:
zone.min.js:1错误:(SystemJS)无法解析LoginService的所有参数:(?,CookieService)
如果可以提供帮助,请按照以下方式声明LoginService:
@Injectable()
export class LoginService {
constructor (private _apiEndpoint: ApiEndpoint, private _cookieService: CookieService) {}
...
}
并且他们都在app.module.ts的应用提供商中:
providers: [
ApiEndpoint,
HTTP_PROVIDERS,
CookieService,
LoginService,
HttpClient,
provide(LocationStrategy, {useClass: HashLocationStrategy}),
provide(ExceptionHandler, {useClass: MyExceptionHandler})
],
有人有想法吗?谢谢!
答案 0 :(得分:2)
如评论中所述,问题是循环依赖。在您说HttpClient需要LoginService之前,设计似乎很好。您的依赖关系链如下所示:
LoginService> ApiEndpoint> HttpClient -x- LoginService
您需要在LoginService中找到HttpClient需要的内容并将其带入自己的服务中。您的依赖关系应该是这样的。
@Injectable()
export class LoginService {
constructor(apiEndpoint: ApiEndpoint, newServiceWithCommonStuff: NewServiceWithCommonStuff) {}
}
@Injectable()
export class ApiEndpoint {
constructor(httpClient: HttpClient) {}
}
@Injectable()
export class NewServiceWithCommonStuff {
}
@Injectable()
export class HttpClient {
constructor(newServiceWithCommonStuff: NewServiceWithCommonStuff) {}
}