私は Guice を初めて使用するので、これがばかげた質問である場合は申し訳ありませんが、かなりイライラしています。
私のモジュールでは、私が制御していないフレームワークのメンバーであるオブジェクトを構築しています。次に、後でそのインスタンスにバインドして、injector.getInstance(FrameworkClass.class); でアクセスできるようにします。
そのオブジェクトを構築するとき、コンストラクターによって注入されるように注釈が付けられている独自のオブジェクトの 1 つを使用したいと考えています。
すなわち
public class MyClass {
OtherClass dependency;
@Inject
Public MyClass(OtherClass dependency) {
....
}
}
public class AModule extends AbstractModule {
protected void configure() {
MyClass frameworkDependency = ???
FrameworkClass fc = new FrameworkClass(frameworkDependency);
bind(FrameworkClass.class).toInstance(fc);
}
}
この例では、 OtherClass はアノテーションのない単純なクラスですが、デフォルトの空のコンストラクターであるため、理解できる限り、Guice は新しいものを作成して MyClass コンストラクターに提供する必要があります。
私の質問は、モジュール内の MyClass の新しいインスタンスにアクセスして、フレームワーク クラスに提供できるようにするにはどうすればよいですか?
以前は、フィールド インジェクションを介して独自のクラスを注入していたので、次のようになりました。
public class MyClass {
@Inject
OtherClass dependency;
}
public class AModule extends AbstractModule {
protected void configure() {
MyClass frameworkDependency = new MyClass();
requestInjection(frameworkDependency);
FrameworkClass fc = new FrameworkClass(frameworkDependency);
bind(FrameworkClass.class).toInstance(fc);
}
}
可能であれば、 MyClass をコンストラクターとして注入したままにしておくことをお勧めします。