How to implement Dagger for worker classes?

后端 未结 2 2050
忘了有多久
忘了有多久 2020-12-18 20:27

Since the Worker class is created by the framework (WorkerManager), how can we use @Inject fields into the Worker?

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-18 20:43

    You have to provide class using @Provides annotation in the module to inject.

    First create a component containing a module which will provide the class.

    @Component(modules = {Module.class})
    public interface Component1{
    
        void inject(SyncWorker syncWorker);
    }
    

    Module Class

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

    Now write in your code, a constructor that is used to inject the component into your worker class.

    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() {
    
        }
    }
    

提交回复
热议问题