新しいプロジェクトを開始して、私は私のサービスをいくつか受け取りました。Angular2:AuthGuardへのサービス注入により、他のサービスへの注入が中断される
- TokenServiceは、トークンをチェックする
- UserServiceの記事をUserServiceのを使用して、現在のユーザーを格納
- のAuthServiceは
- APIはHTTPヘッダを取得するためのAuthServiceを使用して、HTTPヘッダーを提供するために、TokenServiceとUserServiceのを使用しています
これらのサービスは私の最後のプロジェクトではうまくいきました。循環的な依存関係はないようです。
私の新しいプロジェクトでは、UserServiceも注入されるAuthGuardが必要でした。 AuthGuardのコンストラクタにUserServiceを追加すると、Angularは他のサービスの依存としてUserServiceを解決できません。 AuthGuardに注入することなくすべてうまく動作します。
これはUserServiceだけでなくAuthServiceの場合も同様ですが、私の問題はサービスからではなく、提供されている方法から発生していると推測していました。
app.module.ts
import { App } from './app.component';
import { AppState, InternalStateType } from './app.service';
import { GlobalState } from './global.state';
import { NgaModule } from './theme/nga.module';
import { PagesModule } from './pages/pages.module';
import {UserService} from "./services/user.service";
import {DefaultGuard} from "./pages/default.guard";
import {AuthService} from "./services/auth.service";
import {TokenService} from "./services/token.service";
import {Api} from "./services/api.service";
// Application wide providers
const APP_PROVIDERS = [
AppState,
GlobalState,
UserService,
DefaultGuard,
AuthService,
TokenService,
Api
];
@NgModule({
bootstrap: [App],
declarations: [
App,
],
entryComponents: [
],
imports: [ // import Angular's modules
BrowserModule,
HttpModule,
RouterModule,
FormsModule,
ReactiveFormsModule,
NgaModule.forRoot(),
NgbModule.forRoot(),
PagesModule,
routing
],
providers: [ // expose our Services and Providers into Angular's dependency injection
APP_PROVIDERS
]
})
export class AppModule {
constructor(public appState: AppState) {
}
}
pages.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { routing } from './pages.routing';
import { NgaModule } from '../theme/nga.module';
import { AppTranslationModule } from '../app.translation.module';
import { Pages } from './pages.component';
@NgModule({
imports: [CommonModule, AppTranslationModule, NgaModule, routing],
declarations: [Pages],
})
export class PagesModule {
}
AuthGuardがページに属するルータで使用されて default.guard.ts .module.ts
私のサービスの10の依存性:
user.service.ts
constructor(
private http: Http,
) {
}
api.service.ts
constructor(
private http: Http,
private auth: AuthService,
) {
}
auth.service.ts
constructor(
public userService: UserService,
private tokenService: TokenService,
private http: Http,
) {}
token.service.ts要約へ
constructor(
public userService: UserService
) {
}
ので:私はDefaultGuardにUserServiceのを注入するまで、すべてが動作します。 UserServiceをDefaultGuardに注入すると、TokenServiceの依存関係解決エラーが発生します。 AuthServiceをDefaultGuardに注入すると、ApiServiceなどの依存関係解決エラーが発生します。
何が問題なの?
更新 このように、サービスがインポートされたり挿入されたりする順序がこの問題に影響するようです。私はどのくらい正確にはわかりませんが。