Ahm*_*deh 3 java android dependency-injection dagger-2 android-workmanager
如何在 Dagger 2.16 中为工人类实现 Dagger?
public class SyncWorker extends Worker {
@Inject
ISettingRepository settingRepository;
@NonNull
@Override
public Result doWork() {
sync();
return Result.SUCCESS;
}
private void sync() {
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序组件
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何注入settingRepository?
小智 5
我能够用这种方法注入一个工人。
首先,在应用程序组件中创建一个新方法来注入您的工作类。
@Singleton
public interface AppComponent extends AndroidInjector<YourApplicationClass> {
@Component.Builder
interface Builder {
@BindsInstance
AppComponent.Builder application(Application application);
AppComponent build();
}
void inject(NotifWorker worker);
}
Run Code Online (Sandbox Code Playgroud)在您的应用程序中,像往常一样构建 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;
}
}
Run Code Online (Sandbox Code Playgroud)在你的工人阶级中,做这样的事情。
public class NotifWorker extends Worker {
@Inject
ToBeInjectedClass toBeInjectedClass;
public NotifWorker() {
YourApplicationClass
.getInstance()
.getAppComponent()
.inject(this)
}
}
Run Code Online (Sandbox Code Playgroud)