java - 如何在 Dagger 2.16 中为工作类实现 Dagger?('android.arch.work:work-runtime')
问题描述
如何在 Dagger 2.16 中为工人类实现 Dagger?
public class SyncWorker extends Worker {
@Inject
ISettingRepository settingRepository;
@NonNull
@Override
public Result doWork() {
sync();
return Result.SUCCESS;
}
private void sync() {
}
}
我的应用组件
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
BaseModule.class,
ApiModule.class,
UserDatabaseModule.class,
SaleDatabaseModule.class,
AppModule.class,
ActivityBuilderModule.class
})
public interface AppComponent extends AndroidInjector<DaggerApplication> {
void inject(BaseApp app);
@Override
void inject(DaggerApplication application);
@Component.Builder
interface Builder {
@BindsInstance
Builder getApp(Application application);
AppComponent build();
}
}
如何注入settingRepository?
解决方案
我能够用这种方法注入一个工人。
首先,在您的应用程序组件中创建一个新方法,该方法将注入您的工作类。
@Singleton public interface AppComponent extends AndroidInjector<YourApplicationClass> { @Component.Builder interface Builder { @BindsInstance AppComponent.Builder application(Application application); AppComponent build(); } void inject(NotifWorker worker); }
在您的应用程序中,像往常一样构建您的 dagger 组件,但将其分配给一个变量并使其成为全局变量。
public class YourApplicationClass implements HasActivityInjector { private AppComponent appComponent; @Override public void onCreate() { super.onCreate(); appComponent = DaggerAppComponent.builder() .application(this) .build(); appComponent.inject(this); } public AppComponent getAppComponent() { return appComponent; } }
在你的工人阶级中,做这样的事情。
public class NotifWorker extends Worker { @Inject ToBeInjectedClass toBeInjectedClass; public NotifWorker() { YourApplicationClass .getInstance() .getAppComponent() .inject(this) } }
推荐阅读
- qt - Qt 使用带有 QAbstractItemModel 的预先存在的模型
- css - 如何自动设置 TD 宽度全部相等宽度
- excel - 复制 Book1 中的 B 列(单元格 B2) Book2 中的 B 列(单元格 B2)
- ssl - 通过任何 SSL 或 TLS 版本的 HTTPS 连接
- laravel-5 - Laravel nova 属于过滤器
- angular - 将 PowerBi 中的仪表板嵌入到 Angular6 应用程序中
- java - 有人可以在 as400 数据队列类中给出 addDataQueueListener() 的例子吗
- export - 从 Spotfire 导出到 PowerPoint - 忽略对齐
- macos - Openpose CMakeLists
- dart - 如何在点击下拉列表时更改背景图像?