java - Android - Dagger 注入(inject)非 Activity 或 fragment

标签 java android dagger-2

因此,我们在应用程序中使用 dagger 2,但现在我想注入(inject)一个不是 Activity 或 fragment 的类。我怎样才能做到这一点。所以我想注入(inject)以下类:

public class Analytics {

    private final PageMap pagesByActivity;
    private final HitFactory hitFactory;
    private final Provider<String> storeIdProvider;
    private final Provider<StockChecker> stockCheckerProvider;
    public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
                                    Provider<String> storeIdProvider,
                                    Provider<Checker> checkerProvider,
                                    String suiteIds) {

            this.pagesByActivity = pagesByActivity;
            this.hitFactory = hitFactory;
            this.storeIdProvider = storeIdProvider;
            this.checkerProvider = checkerProvider;
    }
}

这门课的工作是进行分析。我想感染一个名为 deviceInfo 的类,我已经有一个提供方法。

如果我现在尝试注入(inject),它会编译并运行,但随后崩溃,给我一个空对象

最佳答案

将 deviceInfo 作为构造函数参数添加到 Analytics 类。然后在您的 Dagger 模块 provides 方法中,在参数中包含 deviceInfo。这意味着您需要让 Dagger 为您创建 Analytics 对象。 Dagger 将首先创建 DeviceInfo 对象,然后再创建 Analytics 对象。模块中的代码应类似于以下内容:

@Provides
DeviceInfo provideDeviceInfo(){
    return new DeviceInfo();
}

@Provides
Analytics provideAnalytics(DeviceInfo deviceInfo){
    return new Analytics(deviceInfo, [... other parameters]);
}

关于java - Android - Dagger 注入(inject)非 Activity 或 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38773577/

相关文章:

java - Log4j2 - 查找插件 (StrLookup) 解析 ThreadName 以通过 Thread 路由 RollingLogFile

java - 使用MikePenz抽屉,在哪里可以处理onDrawerOpen、关闭软键盘

android - 请求休息服务器的 Kotlin 扩展功能

java - 在 Presenter 类中实例化 DI 组件是一种好习惯吗?

java - 将字符串或变量从对话框传递到 Android Activity

java - javadoc 10.0.2 中模块路径上的多版本 log4j-api-2.11.0.jar

java - JList 中的 ActionListener 出现 ArrayIndexOutOfBoundsException

java - 这是内存泄漏吗?

java - Android ADT 无法运行项目

android - 如何通过 Dagger 将绑定(bind)服务注入(inject) Activity ?