web-dev-qa-db-ja.com

コンストラクタインジェクションを使用してオブジェクトを作成するにはどうすればよいですか?

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をしばらく試した後、コンストラクターインジェクションの使用方法がわかりません。ヒントはNiceです。ありがとうございます。

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

22
Paradiesstaub

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();
_
13
Paradiesstaub