java - 如何使用 Dagger 2 注入(inject) pojo 依赖项?

标签 java android dagger-2

我有一个简单的 pojo 类:

public class MySimpleClass {

    private List<String> mDependency;

    public MySimpleClass (List<String> dependency) {
        mDependency = dependency;
    }
}

我正在尝试使用 Dagger 2 使用依赖注入(inject)创建它。现在我有一个简单的模块和组件:

@Module
public class MySimpleClassModule {

    @Provides
    MySimpleClass provideMySimpleClass(List<String> dependency) {
        return new MySimpleClass(dependency);
    }
}

@Component(modules={MySimpleClassModule.class})
public interface MySimpleClassComponent {
}

但我不确定如何注入(inject) List<String>每次我需要创建 MySimpleClass 的新实例时依赖.在上面的场景中,似乎我实际上需要添加 List<String>MySimpleClassModule 的构造函数每次我需要 MySimpleClass 的新实例时都有该模块的新实例有了新的 List<String> .那是对的吗?在这种特殊情况下,开销似乎很大。

最佳答案

不,不是。

我假设你遇到了 Dagger 的编译错误,因为从问题上看,你是否已经有一个提供这个字符串列表的模块是不清楚的。

要解决这个问题,您可以简单地:

@Module
public class MySimpleClassModule {

    @Provides
    List<String> provideListDependency() {
        return Arrays.asList("One", "Two");
    }

    @Provides
    MySimpleClass provideMySimpleClass(List<String> dependency) {
        return new MySimpleClass(dependency);
    }
}

如果您认为提供此列表应该是另一个模块的一部分,您可以移动它。最主要的是,Dagger 在编译过程中能够找到获取此依赖项的方法。

如果你不想在 over 中创建这个数组,你可以将方法标记为 @Singlethon 这样 dagger 就会缓存它。

关于java - 如何使用 Dagger 2 注入(inject) pojo 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442944/

相关文章:

java - Heroku Postgres : Getting started in Eclipse

java - 在 Android 上下载图像的最佳方式

java - 类初始化后使用 Dagger 2 解决命名依赖关系

android - 如何将参数传递给 Hilt 模块?

android - 刀柄 : Why is ActivityRetainedScoped vs ViewModelScoped

来自 jacoco 的 java.lang.NoSuchFieldException 错误

java - Hibernate-Search flushToIndexes 导致 java.lang.OutOfMemoryError(堆空间)

java - 如果我们使用@embedded注解,HQL(hibernate查询语言)需要如何改变?

java - 带有远程服务的 Android 应用程序

android - RecyclerView OnClick 位置