因此,我们在应用程序中使用了匕首2,但现在我想注入到不是活动或片段的类中。我怎样才能做到这一点。因此,我要插入以下课程:

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的类,该类已经有一个Provides方法。

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

最佳答案

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

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

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

08-17 14:24