23

Cat を提供するコンポーネントを使用して Dog のインスタンスを作成するにはどうすればよいでしょうか。

public final class Dog {
    private final Cat mCat;
    public final static String TAG = "Dog";

    @Inject public Dog(Cat cat) {
        mCat = cat;
        Log.e(TAG, "Dog class created");
    }
}

Dagger 2 をしばらく試した後、コンストラクター インジェクションの使用方法がわかりません。ヒントをいただければ幸いです。

編集:
質問の何が問題になっていますか?Dagger 2 を使用した後、いくつかのチュートリアルに従い、公式ドキュメントを読んだ後、コンストラクター インジェクション機能の使用方法がわかりません。そのため、ここで質問します。@Inject を使用して Cat 依存関係を Dog に注入する代わりに、Dog オブジェクトを提供する DogModule を作成することもできますが、Dog は単なる通常の Java クラスになります。フィールド注入はうまく機能します (使用方法を示す多くの例があります) が、コンストラクター注入を使用するには何をする必要がありますか?

4

1 に答える 1

13

Dagger 2 コンストラクター インジェクション機能を使用してオブジェクトを作成するには、Cat クラスを提供するコンポーネントにメソッドを追加する必要があります。

@Component(
    dependencies = ApplicationComponent.class,
    modules = CatModule.class)
public interface ActivityComponent {
    void inject(final CatActivity a);
    // objects exposed to sub-components
    Cat cat();
    Dog dog();
}

Dog のインスタンスは、 を呼び出すことで取得できます[Component].dog()

final ActivityComponent comp = DaggerActivityComponent.builder()
            .applicationComponent(app.getApplicationComponent())
            .build();

final Dog d = comp.dog();
于 2015-04-26T10:21:02.337 に答える