ルートインジェクタから既に作成されたインスタンスを確実に取得する方法はありますか?私のユースケースは、自分でタイプ(new
の構造体)をインスタンス化する必要があるということですが、上記のタイプを設定する際に、2つのAngular2 Injector管理インスタンスを取得する必要があります。Angular2 - ルート/アプリインジェクタから既にキャッシュされたインスタンスを取得する
app: ApplicatinRef;
上記のapp
変数は、DI自体によって取得されます。私は上記のコードを使用すると
const rootInjector: Injector = app.injector;
rootInjector.get(SomeInstance);
はSomeInstance
タイプを2回インスタンス化されると、私はブートストラップ中に作成された同じインスタンスを取得することを期待していました。
ドゥ・ノート、しかし、私が最初にそれを呼び出した後
rootInjector.get(SomeInstance);
を複数回呼び出したとき、それは再びそれをインスタンス化しません。したがって、ブートストラップ処理中とインジェクタ自体を初めて呼び出すときの2回のインスタンス化のみです。
SomeInstance
の他のプロバイダはDI階層になく、ブートストラップ時にアプリケーションレベルでのみ指定されています。
何か不足していますか?
私はそのように理解しますが、そこには私の問題があります。私は、インスタンスを処理するためにDIコンテナに渡すことは絶対に望まないインスタンスを扱っています。私はそれを自分で作成する必要があります(完全なコントロールが必要です)が、私がコントロールするインスタンスの中には、Angular2 Injectorで管理される他のタイプのインスタンスが2つ必要です。だから型をインスタンス化するときに、インジェクタから他の2つのインスタンスを取得したいと思います。私はすでに回避策を実装していますが、私はAngular2 APIを直接調べて、自分のハックを実装できない、よりクリーンなものを望んでいました。 – 0v3rst33r
Hum .. コードがどのくらい正確に機能するのかわかりませんが、工場でDIを使用することもできます。関数の中でインジェクタを使って角のインスタンスを取得し、自分でカスタムインスタンスを作成することができます。このような 何か: ストラップ(...、提供(ServiceClassName、{useFactory:()=> { /*インジェクタと特殊ロジック* /新しいServiceClassName(injectorInstance1、injectorInstance2、specialInstance)戻り ; を}})) ; –
これはおそらく私が実験できるものです。私のコードがどのように機能するかについての私の質問に、より詳細な情報が追加されます。私は 'ListContainer'で構築する必要がある基本的に' User'ドメインオブジェクト(そのインスタンスはDIから決して出てこないでしょう)であり、DIシステムからのインスタンスを必要とするこれらのコンテナです。 – 0v3rst33r