如何为工人类实现Dagger?

Meh*_*esh 18 android dagger-2 android-jetpack android-workmanager

由于Worker该类是由framework(WorkerManager)创建的,我们如何使用@Inject字段Worker

Ani*_*bla 9

您必须@Provides在模块中使用注释提供类来注入.

首先创建一个包含将提供类的模块的组件.

@Component(modules = {Module.class})
public interface Component1{

    void inject(SyncWorker syncWorker);
}
Run Code Online (Sandbox Code Playgroud)

模块类

@Module
public class Module{

    @Provides
    public ISettingRepository getSettingRepo(){
        return new ISettingRepository();
    }

}
Run Code Online (Sandbox Code Playgroud)

现在编写代码,这是一个构造函数,用于将组件注入到worker类中.

public class SyncWorker extends  Worker {

    @Inject
    ISettingRepository settingRepository;

    public SyncWorker(){
        DaggerComponent1.builder().build().inject();
    }

    @NonNull
    @Override
    public Result doWork() {

        sync();
        return Result.SUCCESS;
    }

    private void sync() {

    }
}
Run Code Online (Sandbox Code Playgroud)


Lev*_*yan 3

我正在使用这些系列的帖子在我的应用程序中实现 dagger,这是我在课堂上ProfileManager 想要的课程。injectWorker

上传工作者

public class UploadWorker extends Worker {

    @Inject
    ProfileManager profileManager;

    @Inject
    @SuppressWarnings("WeakerAccess")
    public UploadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
     Provider.getAppComponent().inject(this);
    }

    @NonNull
    @Override
    public Result doWork() {
     profileManager.someMethod();
    }

}
Run Code Online (Sandbox Code Playgroud)

应用程序Appcomponent类中,我在我的Provider类中设置

   @Override
    protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
        AppComponent appComponent = DaggerAppComponent.builder().application(this).build();
        appComponent.inject(this);
        Provider.setAppComponent(appComponent);
        return appComponent;
    }
Run Code Online (Sandbox Code Playgroud)

提供者

public class Provider {

    private static AppComponent appComponent;

    public static AppComponent getAppComponent() {
        return appComponent;
    }

    public static void setAppComponent(AppComponent component) {
        appComponent = component;
    }

}
Run Code Online (Sandbox Code Playgroud)

应用组件

@Singleton
@Component(modules = {
        AndroidSupportInjectionModule.class,
        ActivityBuilderModule.class,
        ApiModule.class,
        AppModule.class,
        ViewModelModule.class
})
public interface AppComponent extends AndroidInjector<DaggerApplication> {

    @Override
    void inject(DaggerApplication instance);

    void inject(MyApplication app);

    void inject(UploadWorker uploadWorker);

    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(Application application);

        AppComponent build();
    }

}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2196 次

最近记录:

7 年,3 月 前