Java 安卓-匕首注入非活动或碎片
因此,我们在应用程序中使用Dagger2,但现在我想将其注入到一个不是活动或片段的类中。我怎样才能做到这一点。因此,我有一个我想注入的类:Java 安卓-匕首注入非活动或碎片,java,android,dagger-2,Java,Android,Dagger 2,因此,我们在应用程序中使用Dagger2,但现在我想将其注入到一个不是活动或片段的类中。我怎样才能做到这一点。因此,我有一个我想注入的类: public class Analytics { private final PageMap pagesByActivity; private final HitFactory hitFactory; private final Provider<String> storeIdProvider; private
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;
}
}
公共类分析{
私有最终页面映射页面活动;
私人最终工厂;
私人最终提供者StoredProvider;
私人最终提供者StockChecker提供者;
公共分析(PageMap pagesByActivity、HitFactory、HitFactory、,
提供者StoredProvider,
提供者检查提供者,
字符串suiteds){
this.pagesByActivity=pagesByActivity;
this.hitFactory=hitFactory;
this.storeIdProvider=storeIdProvider;
this.checkerProvider=checkerProvider;
}
}
这门课的任务是激发分析能力。我想感染一个名为deviceInfo的类,我已经有了一个提供方法
如果我现在尝试注入,它会编译并运行,但随后崩溃,给我一个空对象将deviceInfo作为构造函数参数添加到Analytics类。然后在Dagger模块
提供的方法中,在参数中包含deviceInfo。这意味着您需要让Dagger为您创建分析对象。Dagger将首先创建DeviceInfo对象,然后再创建Analytics对象。模块中的代码应类似于以下内容:
@Provides
DeviceInfo provideDeviceInfo(){
return new DeviceInfo();
}
@Provides
Analytics provideAnalytics(DeviceInfo deviceInfo){
return new Analytics(deviceInfo, [... other parameters]);
}
将deviceInfo作为构造函数参数添加到Analytics类中。然后在Dagger模块提供的方法中,在参数中包含deviceInfo。这意味着您需要让Dagger为您创建分析对象。Dagger将首先创建DeviceInfo对象,然后再创建Analytics对象。模块中的代码应类似于以下内容:
@Provides
DeviceInfo provideDeviceInfo(){
return new DeviceInfo();
}
@Provides
Analytics provideAnalytics(DeviceInfo deviceInfo){
return new Analytics(deviceInfo, [... other parameters]);
}
这也可以通过构造函数注入来完成
public class Analytics {
@Inject
public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
Provider<String> storeIdProvider,
Provider<Checker> checkerProvider,
String suiteIds,
DeviceInfo deviceInfo) {
this.deviceInfo = deviceInfo;
}
}
外接程序AppComponent
void inject(BootReceiver receiver);
这也可以通过构造函数注入来完成
public class Analytics {
@Inject
public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
Provider<String> storeIdProvider,
Provider<Checker> checkerProvider,
String suiteIds,
DeviceInfo deviceInfo) {
this.deviceInfo = deviceInfo;
}
}
外接程序AppComponent
void inject(BootReceiver receiver);