代码之家  ›  专栏  ›  技术社区  ›  Mehdi Jahed Manesh

如何实现工人阶级的匕首?

  •  18
  • Mehdi Jahed Manesh  · 技术社区  · 7 年前

    自从 Worker 类是由框架创建的( WorkerManager )如何使用 @注入 字段到 工人 ?

    2 回复  |  直到 7 年前
        1
  •  9
  •   Anisuzzaman Babla Jayesh Elamgodil    7 年前

    你必须用 @Provides 要注入的模块中的注释。

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

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

    模块类

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

    现在编写代码,这是一个用于将组件注入工作类的构造函数。

    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() {
    
        }
    }
    
        2
  •  2
  •   Levon Petrosyan    7 年前

    我正在使用 these 在我的应用程序和 ProfileManager 是我要去的班级吗 inject 在我的 Worker 班级。

    上传工作者

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

    应用 我要上的课 Appcomponent 在我的 Provider

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

    供应商

    public class Provider {
    
        private static AppComponent appComponent;
    
        public static AppComponent getAppComponent() {
            return appComponent;
        }
    
        public static void setAppComponent(AppComponent component) {
            appComponent = component;
        }
    
    }
    

    应用程序组件

    @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();
        }
    
    }
    
    推荐文章