3

この質問は、おそらくこの1つの PassパラメーターをGuiceを使用してコンストラクターに正確に複製したものです。

違いは、GuiceだけでなくAndroidにもroboguiceを使用しているため、そこでの回答が機能しないことです。

質問は-作成されたオブジェクトに初期化パラメータを渡すにはどうすればよいですか?つまり、roboguiceが知らないパラメータで初期化する必要があるインターフェイスを挿入しました。

私が提供するリンクに表示されているものは、ファクトリインターフェイスを作成し、次のように登録する必要があります

  void configure(Binder binder) {
   binder.install(new FactoryModuleBuilder()
         .implement(FooInterface.class, Foo.class)
         .build(FooFactory.class));
  }


しかし、FactoryModuleBuilderクラスが見つかりません。私はIntellijIDEAを使用しています。現在の場所でアクセスできるすべてのクラスを表示でき、「Factory」という単語で始まるクラスがないことを100%確信できます。

roboguiceを使用してファクトリを作成するにはどうすればよいですか?

更新しました

guice-assistedinjectをダウンロードするのを忘れました。しかし、それでもこの工場をどこに登録すればよいのかわかりません。

更新2

なぜそれが必要なのですか?ある抽象化には、Roboguiceでは解決できない依存関係があるはずだからです。この依存関係は、単純な文字列や数値であっても、任意のタイプにすることができます。

私の場合、UIにNumberPickerコントロールがあり、MyNumberPickerWrapperクラスのすべてのUI固有のタスクを移動したいと思います。そして、このラッパーを作成するときに、コンストラクターを介してその依存関係(このコントロール)を挿入します。

私がそのようなアプローチで正しいかどうかは重要ではありませんが、コンストラクターの注入が必要であり、この注入されたクラスをRoboguiceで作成できなかった、より適切な例がたくさんある可能性があります

4

2 に答える 2

0

私はこの同じ問題に直面し、Pavel's answer のおかげで成功しました。私はいくつかのエラーに苦労しなければなりませんでした。それが使用されているライブラリのバージョンによるものかどうかはわかりませんが、コンストラクターの注釈を変更せず@Inject@AssistedInject. ということで、インターフェースを実装するクラスのコードはこんな感じ。

public class CustomObject implements ICustomObject {
    protected String name;

    @AssistedInject
    public CustomObject(@Assisted String name){
       this.name = name;
    }
}
于 2016-05-18T13:42:54.233 に答える