【问题标题】:Dagger 2 dependencies in non-activity classes非活动类中的 Dagger 2 依赖项
【发布时间】:2018-09-12 14:28:54
【问题描述】:

因此,有很多教程展示了如何使用 Dagger 2 将依赖项注入到活动类中。但由于某种原因,依赖项似乎从未被插入到不是活动/片段/服务的类中。我想知道如何将依赖项插入到普通类中。

现在,我正在尝试将 dagger 注入一个字段,但该字段仍然为空。我假设错误是我没有告诉匕首进行注射。但我不确定如何解决这个问题。

@Module
public class TestModule {
    @Provides 
    @Singleton
    String provideTestString() {
        return "test string";
    }
}
@Singleton
@Component(modules = { TestModule.class })
public interface TestComponent {
    void inject(TestClass testClass);
    String getTestString();
}
class TestClass {
    @Inject
    String testString;

    public boolean isTestStringNull() {
        return testString == null;
    }
}
Log.d("---", "is test string null: " + new TestClass().isTestStringNull());//is true

虽然我可以在 Application 的子类中调用 DaggerTestComponent.create(),但它在不了解 Application 的随机类中不可用。那么让匕首初始化我的字段的正确方法是什么?

【问题讨论】:

    标签: android dagger-2


    【解决方案1】:
    class TestClass {
        @Inject
        String testString;
    
        @Inject
        TestClass() {}
    }
    
    @Singleton
    @Component(modules = { TestModule.class })
    public interface TestComponent {
        TestClass testClass();
    
        String testString();
    }
    
    Log.d("---", "is test string null: " + component.testClass().isTestStringNull());//is false
    

    【讨论】:

    • 如何创建组件变量?您需要使用单例公开公开这些内容吗?
    • Is that something you need to expose publicly using a singleton? 通常您在Application 中创建单例版本,然后在其他任何地方使用它。你用DaggerTestComponent.create()创建它。
    • 嗯,出于某种原因,我对公开我在 Application 中创建的内容感到非常不舒服。感觉是不好的做法。虽然事后看来,我不知道为什么我会这么想。现在看来很傻。哦,好的,谢谢!
    • 如果您选中 medium.com/@Zhuinden/… ,我会在 Application 中创建它,并让 getter 可以作为 static 全局访问
    【解决方案2】:

    每个应用程序都有一个入口。因此,您可以使用一些顶级类来代替 Application。该方法类似于使用 Activity 的方法,甚至更简单,因为您可以将所需的类传递给构造函数。

    【讨论】:

    • 您是否建议在某处执行 DaggerTestComponent.create(),保存返回的变量并通过静态方法公开它?
    • 取决于变量的生命周期。如果一个实例应该只有一个应用程序 - 使用@Singleton。否则 - 您可以在需要之前生成实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多