如何使用构造函数注入创建对象?

Par*_*aub 22 dagger-2

如何使用提供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");
    }
}
Run Code Online (Sandbox Code Playgroud)

在尝试使用Dagger 2一段时间后,我不知道如何使用构造函数注入 - 一个提示会很好,谢谢.

编辑:
这个问题怎么了?在使用Dagger 2之后,按照几个教程并阅读官方文档,我不知道如何使用构造函数注入功能,这就是我在这里问的原因.而不是使用@Inject将Cat依赖项注入Dog中,我可以编写一个提供Dog对象的DogModule,但是Dog将只是一个普通的Java类.现场注入效果很好(有很多示例显示如何使用它)但是我需要做什么才能使用构造函数注入?

Par*_*aub 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();
}
Run Code Online (Sandbox Code Playgroud)

然后可以通过调用来恢复Dog的实例[Component].dog().

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

final Dog d = comp.dog();
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对我很有帮助.谢谢!但是,我仍然想知道为什么没有任何构造函数依赖注入如此流行的框架的例子. (5认同)