【问题标题】:How to create an object using constructor injection?如何使用构造函数注入创建对象?
【发布时间】:2015-04-25 16:14:22
【问题描述】:

如何使用提供 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 之后,看了几个教程并阅读了官方文档,我不知道如何使用构造函数注入功能,这就是我在这里问的原因。我可以编写一个提供 Dog 对象的 DogModule,而不是使用 @Inject 将 Cat 依赖项注入到 Dog 中,但是 Dog 将只是一个常规 Java 类。字段注入效果很好(有很多例子展示了如何使用它)但是我需要做什么才能使用构造函数注入?

【问题讨论】:

    标签: dagger-2


    【解决方案1】:

    要使用 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();
    }
    

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

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

    【讨论】:

    • 这个答案对我帮助很大。谢谢!但是,我还是想知道为什么这么流行的框架没有构造函数依赖注入的例子。
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2020-08-16
    • 2013-11-17
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多