互いに依存しているサービス
2023-08-24 18:22:52
質問
私のAngular 2アプリでは、互いに依存する2つのサービスがあります(サービスAはサービスBからメソッドを呼び出し、逆も同様です)。
以下は関連するコードです。
app.component.ts
:
import {Component} from 'angular2/core';
import {TempService} from '../services/tmp';
import {Temp2Service} from '../services/tmp2';
@Component({
selector: 'my-app',
templateUrl: 'app/app/app.component.html',
providers: [TempService, Temp2Service]
})
export class AppComponent { (...) }
サービス1です。
import {Injectable} from 'angular2/core';
import {Temp2Service} from './tmp2';
@Injectable()
export class TempService {
constructor (private _sessionService: Temp2Service) {}
}
サービス2
import {Injectable} from 'angular2/core';
import {TempService} from './tmp';
@Injectable()
export class Temp2Service {
constructor (private _sessionService: TempService) {}
}
アプリを実行すると、以下のようなエラーが発生します。
EXCEPTION: 'Temp2Service' のすべてのパラメータを解決できません。 'Temp2Service'(undefined)のすべてのパラメータを解決できません。すべてのパラメータがInjectで装飾されているか、有効な型アノテーションを持っていることを確認してください。 Injectで装飾されているか、有効な型アノテーションを持つか、そして Temp2Service' が Injectable でデコレートされていることを確認してください.
片方のサービスのコンストラクタをコメントすると、アプリは正常に実行されます。ということは、2つのサービスの相互参照に問題があるのではないかと推測しています。
ここで何が間違っているのか見当がつきますか?それとも、私のアプローチがすでに間違っているのでしょうか?
どのように解決すればよいのでしょうか?
これは循環依存と呼ばれるものです。Angular2自体の問題ではありません。私が知る限り、どの言語でも許されることではありません。
この循環型依存関係を取り除くには、コードをリファクタリングする必要があります。おそらく、これらのサービスのうちの1つを新しいサービスに分割する必要があるでしょう。
単一責任の原則に従えば、循環的依存関係の罠にはまることはないでしょう。
関連
-
[解決済み] Angular 2 Karma Test 'component-name' は既知の要素ではありません。
-
[解決済み] 継承と依存性注入
-
[解決済み] Angular 4+ ngOnDestroy() サービス中 - observableを破壊する
-
[解決済み] angular4 / typescriptでdocument.getElementByIdの置き換え?
-
[解決済み] 新しいangularプロジェクトを作成する際に依存関係ツリーエラーを解決できない
-
[解決済み] Angular2 DIRECTIVEは要素の既知のプロパティではないので、バインドできません。
-
[解決済み] の@ViewChildのreadパラメータは何ですか?
-
[解決済み] Angular : ルートへの手動リダイレクト
-
[解決済み] Angular - ngForの中のngIfの中のパラメータを持つng-template [重複]。
-
[解決済み] Angular2で複数のルートパラメータを渡す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 2におけるEventEmitter.next()とEventEmitter.emit()の相違点
-
[解決済み] Angular Materialでのデフォルトのソート - ヘッダーのソート
-
[解決済み] Angular 4+ ngOnDestroy() サービス中 - observableを破壊する
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?
-
[解決済み] Angular2ルートでAngularの方法でパラメータを取得するには?
-
[解決済み] 64進数の文字列を角(2+)でエンコードおよびデコードする。
-
[解決済み] コンポーネントではなくクラスにサービスをインジェクトする方法
-
[解決済み] Typescriptで文字列をbooleanに変換する方法 Angular 4
-
[解決済み] Uncaught Error: Unexpected module 'FormsModule' declared by the module 'AppModule'. Pipe/@Directive/@Component アノテーションを追加してください。
-
[解決済み] APIレスポンスからレスポンスヘッダを読み取る - Angular 5 + TypeScript