Last active
February 14, 2024 08:29
-
-
Save TinasheMzondiwa/a3712b00c2cb24b5870a621142ad16bd to your computer and use it in GitHub Desktop.
Android Dagger 2 Setup with Work Manager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import androidx.work.Worker | |
import dagger.Module | |
import dagger.android.AndroidInjector | |
import dagger.android.ContributesAndroidInjector | |
import dagger.multibindings.Multibinds | |
object AndroidWorkerInjection { | |
fun inject(worker: Worker) { | |
val application = worker.applicationContext | |
if (application !is HasWorkerInjector) { | |
throw RuntimeException( | |
"${application.javaClass.canonicalName} does not implement ${HasWorkerInjector::class.java.canonicalName}") | |
} | |
val workerInjector = (application as HasWorkerInjector).workerInjector() | |
workerInjector.inject(worker) | |
} | |
} | |
interface HasWorkerInjector { | |
fun workerInjector(): AndroidInjector<Worker> | |
} | |
@Module | |
abstract class AndroidWorkerInjectionModule { | |
@Multibinds | |
abstract fun workerInjectorFactories(): Map<Class<out Worker>, AndroidInjector.Factory<out Worker>> | |
@ContributesAndroidInjector | |
abstract fun bindExampleWorker(): ExampleWorker | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context | |
import androidx.work.Worker | |
import androidx.work.WorkerParameters | |
import javax.inject.Inject | |
class ExampleWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { | |
@Inject | |
lateinit var dependency: SomeDependency | |
override fun doWork(): Result { | |
AndroidWorkerInjection.inject(this) | |
// Do work using [dependency] | |
return Result.success() | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.app.Application | |
import androidx.work.Worker | |
import javax.inject.Inject | |
class MyApp : Application() : HasWorkerInjector { | |
@Inject | |
lateinit var workerInjector: DispatchingAndroidInjector<Worker> | |
override fun workerInjector(): AndroidInjector<Worker> = workerInjector | |
override fun onCreate() { | |
super.onCreate() | |
// Setup Dagger | |
DaggerMyAppComponent.builder() | |
.application(this) | |
.build() | |
.inject(this) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import dagger.BindsInstance | |
import dagger.Component | |
import dagger.android.AndroidInjectionModule | |
import dagger.android.support.AndroidSupportInjectionModule | |
import javax.inject.Singleton | |
@Singleton | |
@Component( | |
modules = [AndroidWorkerInjectionModule::class] | |
) | |
interface MyAppComponent { | |
@Component.Builder | |
interface Builder { | |
@BindsInstance | |
fun application(app: MyApp): Builder | |
fun build(): MyAppComponent | |
} | |
fun inject(app: MyApp) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment