19

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

TylerH
  • 20,799
  • 66
  • 75
  • 101
Mehdi Jahed Manesh
  • 2,228
  • 2
  • 17
  • 34

1 Answers1

3

I am using these series of post for implementing dagger in my app and ProfileManager is the class I wnat to inject in my Worker class.

UploadWorker

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

}

In Application class I am setting Appcomponent in my Provider class

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

Provider

public class Provider {

    private static AppComponent appComponent;

    public static AppComponent getAppComponent() {
        return appComponent;
    }

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

}

Appcomponent

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

}
Levon Petrosyan
  • 8,815
  • 8
  • 54
  • 65