1. ホーム
  2. angular

[解決済み] コンストラクタ注入を行わずにサービスのインスタンスを取得する

2022-10-17 02:31:30

質問

私は @Injectable サービスが定義されています。私は、コンストラクタ注入を使用せずにサービスのインスタンスを取得したいと思います。私は ReflectiveInjector.resolveAndCreate を使ってみましたが、それは新しいインスタンスを作成するようです。

私がしようとしている理由は、多くのコンポーネントによって派生したベースコンポーネントがあることです。サービスにアクセスする必要がありますが、すべての派生コンポーネントでサービスをインジェクトしたくないので、ctorにそれを追加したくありません。

TLDR: 私は ServiceLocator.GetInstance<T>()

UPDATEです。 RC5+に対応したコードを更新しました。 コンポーネントで使用するためのインジェクタのインスタンスを保存する

どのように解決するのですか?

はい。 ReflectiveInjector.resolveAndCreate() は新しい、接続されていないインジェクタのインスタンスを作成します。

Angularsをインジェクションすることができます。 Injector のインスタンスを注入し、そこから希望するインスタンスを

constructor(private injector:Injector) {
  injector.get(MyService);
}

を格納することもできます。 Injector をグローバル変数に格納し、このインジェクタインスタンスを使用して、例えば、次のように、提供されたインスタンスを取得することもできます。 https://github.com/angular/angular/issues/4112#issuecomment-153811572