gpt4 book ai didi

angular - 如何解决循环依赖

转载 作者:太空狗 更新时间:2023-10-29 17:07:11 26 4
gpt4 key购买 nike

我有 3 个服务:

auth.service.ts, account.service.ts, http.service.ts

在用户注册时,我应该创建新帐户,因此我将 account.service.ts 导入到 auth.service.ts。我应该这样做,因为我使用注册表单数据来创建新帐户。

@Injectable()
export class AuthService {
constructor(public accountService: AccountService) {}

signUp(name: string, phone: string, email: string, password: string): void {

...

userPool.signUp(phone, password, attributeList, null, (err: any, result: any) => {
if (err) {

...

return;
}

this.accountService.createAccount(name, phone, email).subscribe(res => {

...

this.router.navigate(['/auth/confirmation-code']);
});
});

因此,当我使用 AWS Cognito 时,我应该将授权 token 从 auth.service.ts 添加到 http.service.ts 因此我将 auth.service.ts 导入到 http.service.ts。

@Injectable()
export class HttpService {
private actionUrl: string;
private headers: Headers;
private options: RequestOptions;

constructor(
public _http: Http,
public authService: AuthService
) {
this.actionUrl = 'https://example.com/dev';
this.headers = new Headers();

this.authService.getAuthenticatedUser().getSession((err: any, session: any) => {
if(err) return;
this.headers.append('Authorization', session.getIdToken().getJwtToken());
});

this.headers.append('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
this.headers.append('Access-Control-Allow-Headers', 'Content-Type, X-XSRF-TOKEN');
this.headers.append('Access-Control-Allow-Origin', '*');

this.options = new RequestOptions({ headers: this.headers });
}

get(request: string): Observable<any> {
return this._http.get(`${this.actionUrl}${request}`)
.map(res => this.extractData(res))
.catch(this.handleError);
}

在我的 account.service.ts 中,我应该使用 http.service.ts 来创建新帐户。

@Injectable()
export class AccountService {
constructor(public httpService: HttpService) {}

WARNING in Circular dependency detected: src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts

WARNING in Circular dependency detected: src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts

WARNING in Circular dependency detected: src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts

我明白这是循环依赖错误。如何解决?最佳实践?所有服务都履行其职责并且很重要。

最佳答案

您可以为此使用Injector。像往常一样通过构造函数注入(inject)它,然后当您需要一些导致循环依赖的服务时,从中获取该服务。

class HttpService {
constructor(private injector: Injector) { }

doSomething() {
const auth = this.injector.get(AuthService);
// use auth as usual
}
}

关于angular - 如何解决循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46832072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com