データ オブジェクトのグラフがあり、このグラフのノードごとに 1 つのサービスを作成したい状況に遭遇しました。問題は、このサービス (およびその依存関係) が、対象のノードに依存していることです。このようなもの:
class Visitor {
void enter(Node node){
Service service = guice.create(node)
service.doComplexDomainLogic(/*some runtime information about the graph and the path to get here, other things*/)
}
}
ここでの意図は、グラフ上のすべてのノードに対して、 の新しいインスタンスと、 の依存関係の新しいインスタンスを作成することです。Service
Service
だから今、私はいくつかのオプションがあります:
guice
支援された注入工場によって支えられています。これは私たちが現在行っていることであり、サービスが依存している場合は、ノードへの依存関係がすべてのサービスに依存している必要がありますnode
。つまり、ここで補助注入ファクトリーを使用すると、service
依存するクラスごとにそれを使用する必要があり、これは不快です。- ネストされたブートストラッパーと呼ばれるもの、つまり、新しいインジェクターを備えた新しいモジュール、事実上新しい環境を使用でき、その環境のセットアップで
bind(Node.class).toInstance(node)
. このコードは最初の訪問時に実行され、その結果がキャッシュされます。 - Guice のカスタム スコープを使用できます (と思います)。
私と私のチームがカスタム スコープを認識していなかったという理由だけで、いくつかの場所で 2 番目を実行しました。カスタム スコープの別の用途が 1 つありますが、それを実装するのは、私が望んでいたよりもはるかに複雑でした。このガイドに従うことは役に立ちますが、安全性の低い土地を掘り下げなければならないことは明らかであり、前回の訪問はそれほど楽しいものではありませんでした.
この動作を得るには、どの guice 機能を使用する必要がありますか?