2

ClassWithManyDependencies があるとします。プログラムでクラスの新しいインスタンスを数回作成するために、このクラスの Guice プロバイダーを作成したいと考えています (別のクラスはこのプロバイダーに依存し、いくつかの時点でそれを使用して新しいインスタンスを作成します)。

これを実現する 1 つの方法は、プロバイダーを ClassWithManyDependencies のすべての依存関係に依存させることです。これはかなり醜いです。

これを達成するためのより良い方法はありますか?

注 - プロバイダーがインジェクターに依存することは絶対にしたくありません。私が検討したもう 1 つのオプションは、ClassWithManyDependencies と ClassWithManyDependenciesProvider で同じ基本クラスを拡張することですが、それは見苦しいものです。

4

2 に答える 2

9

メーリング リストで言及されているように、注入できる場所であれば、代わりにClassWithManyDependencies注入するだけでよくProvider<ClassWithManyDependencies>、自分で特別なことを書く必要はありません。Guice がこれを行います。

于 2010-04-15T16:37:47.800 に答える
-1

他のフレームワークと統合する場合を除いて、プロバイダーを作成する必要はありません。

ClassWithManyDependencies インスタンスを注入する代わりに、スコープ SINGLETON および多くのインスタンスを構築するクラスに ClassWithManyDependencies をバインドしないでください。プロバイダーが注入されます。(Guice はバインドされたクラスごとに無料でそれを行うことができます)

このプロバイダーでは、 get() を呼び出すだけで、スコープ SINGLETON にない場合は毎回新しいインスタンスが作成されます。

ClassWithManyDependencies が一部の GUICE IOC と一部のコンストラクター パラメーターの両方に依存しているというトリッキーなケースにいる場合は、アシスト インジェクションを使用する必要があります。

于 2010-04-15T16:39:25.577 に答える