1

特にAndroidを使用して制御の反転を始めていますが、質問がありGuiceます。RoboGuice

リソース(基本的にはXMLまたはJSON文字列)を返すメソッド呼び出しがあります。

public Resource getResource(){
// Some implementation details that call a web service and throw the result in a string...
String resource = ........
}

Resourceクラスは実際にはラップされているだけなので、オブジェクトStringの重要な部分であるため、コンストラクターに渡すのが理にかなっていると思いました。Resource

public class Resource{
   Resource(String theXMLorJSON){
   ...
   }
}

いくつかの質問:

  1. 通話Resourceで新しいものを作成するにはどうすればよいですか?メソッドgetResourceを呼び出さずにIoCを使用したいと思います。new
  2. 別のクラスがコンストラクターを使用する場合、構築時にダイナミックが必要なときに、コンテナーResourceを使用してコンテナーを構築するにはどうすればよいですか?私はちょうど同様の質問 をしましたが、を使用してこれを処理する特定の方法があるかもしれないと信じています。 GuiceStringGuice

本当にありがとう!

4

1 に答える 1

2

依存性注入について何か誤解しているのではないかと思います。すべてのnew場合に使用を避けるようにする必要はありません...主に、テスト用にモックアウトできるようにしたいものを作成するために使用することを避けたいと考えています。通常、コンテナを接続できるようにするのが最善です。そのようなオブジェクトに依存するクラス。new

ただしResource、クラスは、実行するテストで手動で簡単に作成できる単純な値オブジェクトのように聞こえます。また、どの種類のサービスにも依存しません...ただ。が含まれていStringます。したがって、コンテナに作成させようとする理由はありません。

一方、メソッドを含むクラスはgetResource()、実際にWebサービスを呼び出さなくても、テストでそのクラスに依存するものを使用できるようにするため、コンテナーで作成する必要があります。

コンテナーによって注入される依存関係と実行時にのみ認識されるパラメーターの両方を取得するコンストラクターを持つクラスがある場合は、実行時パラメーターのみを取得するメソッドを使用して、ある種の中間ファクトリを作成する必要があることに注意してください。Guiceを使用すると、Assisted Injectを使用してインターフェイスからこのようなファクトリを自動的に作成できます(RoboGuiceで機能するかどうかはわかりませんが、このようなファクトリの実装を手動で作成するのも簡単です)。

于 2011-11-19T22:09:17.803 に答える