From 7cd13ac8e403551771282b0aa7f554d885e23bd5 Mon Sep 17 00:00:00 2001 From: Marcos Holgado Date: Fri, 21 Dec 2018 13:53:43 +0000 Subject: [PATCH] multi-module with dagger-android after refactor --- .../java/com/marcosholgado/MyApplication.kt | 14 +++++++++-- .../daggerplayground/MainActivity.kt | 16 ++++--------- .../di/ActivityBindingModule.kt | 16 +++++++++++++ .../daggerplayground/di/AppComponent.kt | 24 +++++++++++++++++++ .../daggerplayground/di/AppModule.kt | 11 +++++++++ .../daggerplayground/di/AppScope.kt | 7 ++++++ .../daggerplayground/di/Feature2Component.kt | 11 --------- .../daggerplayground/di/Feature2Module.kt | 10 -------- .../marcosholgado/daggerplayground/models.kt | 3 +++ .../marcosholgado/core/di/CoreInjectHelper.kt | 14 ----------- .../mymodule/Feature1Component.kt | 11 --------- .../marcosholgado/mymodule/OtherActivity.kt | 14 ++++------- 12 files changed, 83 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/ActivityBindingModule.kt create mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/AppComponent.kt create mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/AppModule.kt create mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/AppScope.kt delete mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Component.kt delete mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Module.kt create mode 100644 app/src/main/java/com/marcosholgado/daggerplayground/models.kt delete mode 100644 core/src/main/java/com/marcosholgado/core/di/CoreInjectHelper.kt delete mode 100644 mymodule/src/main/java/com/marcosholgado/mymodule/Feature1Component.kt diff --git a/app/src/main/java/com/marcosholgado/MyApplication.kt b/app/src/main/java/com/marcosholgado/MyApplication.kt index 65eef9a..c5b9fd5 100644 --- a/app/src/main/java/com/marcosholgado/MyApplication.kt +++ b/app/src/main/java/com/marcosholgado/MyApplication.kt @@ -1,14 +1,24 @@ package com.marcosholgado -import android.app.Application import com.marcosholgado.core.di.CoreComponentProvider import com.marcosholgado.daggerplayground.di.CoreComponent +import com.marcosholgado.daggerplayground.di.DaggerAppComponent import com.marcosholgado.daggerplayground.di.DaggerCoreComponent +import dagger.android.DaggerApplication +import dagger.android.AndroidInjector -class MyApplication : Application(), CoreComponentProvider { +class MyApplication : DaggerApplication(), CoreComponentProvider { private lateinit var coreComponent: CoreComponent + override fun applicationInjector(): AndroidInjector { + return DaggerAppComponent + .builder() + .application(this) + .coreComponent(provideCoreComponent()) + .build() + } + override fun provideCoreComponent(): CoreComponent { if (!this::coreComponent.isInitialized) { coreComponent = DaggerCoreComponent diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/MainActivity.kt b/app/src/main/java/com/marcosholgado/daggerplayground/MainActivity.kt index 39b91c3..5ed7116 100644 --- a/app/src/main/java/com/marcosholgado/daggerplayground/MainActivity.kt +++ b/app/src/main/java/com/marcosholgado/daggerplayground/MainActivity.kt @@ -2,29 +2,23 @@ package com.marcosholgado.daggerplayground import android.content.Intent import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import com.marcosholgado.core.ExpensiveObject -import com.marcosholgado.core.di.CoreInjectHelper -import com.marcosholgado.daggerplayground.di.DaggerFeature2Component import com.marcosholgado.mymodule.OtherActivity +import dagger.android.support.DaggerAppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import javax.inject.Inject -class MainActivity : AppCompatActivity() { +class MainActivity : DaggerAppCompatActivity() { @Inject lateinit var expensiveObject: ExpensiveObject + @Inject + lateinit var otherObject: OtherObject + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - - DaggerFeature2Component - .builder() - .coreComponent(CoreInjectHelper.provideCoreComponent(applicationContext)) - .build() - .inject(this) - button.setOnClickListener { startActivity(Intent(this, OtherActivity::class.java)) } diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/ActivityBindingModule.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/ActivityBindingModule.kt new file mode 100644 index 0000000..0ff155c --- /dev/null +++ b/app/src/main/java/com/marcosholgado/daggerplayground/di/ActivityBindingModule.kt @@ -0,0 +1,16 @@ +package com.marcosholgado.daggerplayground.di + +import com.marcosholgado.daggerplayground.MainActivity +import com.marcosholgado.mymodule.Feature1Module +import com.marcosholgado.mymodule.OtherActivity +import dagger.Module +import dagger.android.ContributesAndroidInjector + +@Module +abstract class ActivityBindingModule { + @ContributesAndroidInjector + abstract fun mainActivity(): MainActivity + + @ContributesAndroidInjector(modules = [Feature1Module::class]) + abstract fun otherActivity(): OtherActivity +} \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/AppComponent.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppComponent.kt new file mode 100644 index 0000000..ef7fddf --- /dev/null +++ b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppComponent.kt @@ -0,0 +1,24 @@ +package com.marcosholgado.daggerplayground.di + +import android.app.Application +import com.marcosholgado.MyApplication +import dagger.Component +import dagger.android.AndroidInjector +import dagger.android.support.AndroidSupportInjectionModule +import dagger.BindsInstance + +@Component(modules = [AppModule::class, + ActivityBindingModule::class, + AndroidSupportInjectionModule::class], + dependencies = [CoreComponent::class] +) +@AppScope +interface AppComponent : AndroidInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun application(application: Application): AppComponent.Builder + fun coreComponent(coreComponent: CoreComponent): AppComponent.Builder + fun build(): AppComponent + } +} \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/AppModule.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppModule.kt new file mode 100644 index 0000000..2ec063d --- /dev/null +++ b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppModule.kt @@ -0,0 +1,11 @@ +package com.marcosholgado.daggerplayground.di + +import com.marcosholgado.daggerplayground.OtherObject +import dagger.Module +import dagger.Provides + +@Module +class AppModule { + @Provides + fun provideOtherObject() = OtherObject() +} \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/AppScope.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppScope.kt new file mode 100644 index 0000000..664e621 --- /dev/null +++ b/app/src/main/java/com/marcosholgado/daggerplayground/di/AppScope.kt @@ -0,0 +1,7 @@ +package com.marcosholgado.daggerplayground.di + +import javax.inject.Scope + +@Scope +@Retention +annotation class AppScope \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Component.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Component.kt deleted file mode 100644 index 26fff53..0000000 --- a/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Component.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.marcosholgado.daggerplayground.di - -import com.marcosholgado.core.di.FeatureScope -import com.marcosholgado.daggerplayground.MainActivity -import dagger.Component - -@Component(modules = [Feature2Module::class], dependencies = [CoreComponent::class]) -@FeatureScope -interface Feature2Component { - fun inject(mainActivity: MainActivity) -} \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Module.kt b/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Module.kt deleted file mode 100644 index 8e8751e..0000000 --- a/app/src/main/java/com/marcosholgado/daggerplayground/di/Feature2Module.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.marcosholgado.daggerplayground.di - -import dagger.Module -import dagger.Provides - -@Module -class Feature2Module { - @Provides - fun provideInt() = 1 -} \ No newline at end of file diff --git a/app/src/main/java/com/marcosholgado/daggerplayground/models.kt b/app/src/main/java/com/marcosholgado/daggerplayground/models.kt new file mode 100644 index 0000000..a7f9282 --- /dev/null +++ b/app/src/main/java/com/marcosholgado/daggerplayground/models.kt @@ -0,0 +1,3 @@ +package com.marcosholgado.daggerplayground + +class OtherObject \ No newline at end of file diff --git a/core/src/main/java/com/marcosholgado/core/di/CoreInjectHelper.kt b/core/src/main/java/com/marcosholgado/core/di/CoreInjectHelper.kt deleted file mode 100644 index 379f3d0..0000000 --- a/core/src/main/java/com/marcosholgado/core/di/CoreInjectHelper.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.marcosholgado.core.di - -import android.content.Context -import com.marcosholgado.daggerplayground.di.CoreComponent - -object CoreInjectHelper { - fun provideCoreComponent(applicationContext: Context): CoreComponent { - return if (applicationContext is CoreComponentProvider) { - (applicationContext as CoreComponentProvider).provideCoreComponent() - } else { - throw IllegalStateException("The application context you have passed does not implement CoreComponentProvider") - } - } -} \ No newline at end of file diff --git a/mymodule/src/main/java/com/marcosholgado/mymodule/Feature1Component.kt b/mymodule/src/main/java/com/marcosholgado/mymodule/Feature1Component.kt deleted file mode 100644 index c090b63..0000000 --- a/mymodule/src/main/java/com/marcosholgado/mymodule/Feature1Component.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.marcosholgado.mymodule - -import com.marcosholgado.core.di.FeatureScope -import com.marcosholgado.daggerplayground.di.CoreComponent -import dagger.Component - -@Component(modules = [Feature1Module::class], dependencies = [CoreComponent::class]) -@FeatureScope -interface Feature1Component { - fun inject(activity: OtherActivity) -} \ No newline at end of file diff --git a/mymodule/src/main/java/com/marcosholgado/mymodule/OtherActivity.kt b/mymodule/src/main/java/com/marcosholgado/mymodule/OtherActivity.kt index 84d5a6c..583e205 100644 --- a/mymodule/src/main/java/com/marcosholgado/mymodule/OtherActivity.kt +++ b/mymodule/src/main/java/com/marcosholgado/mymodule/OtherActivity.kt @@ -1,24 +1,20 @@ package com.marcosholgado.mymodule import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import com.marcosholgado.core.ExpensiveObject -import com.marcosholgado.core.di.CoreInjectHelper +import dagger.android.support.DaggerAppCompatActivity import javax.inject.Inject -class OtherActivity : AppCompatActivity() { +class OtherActivity : DaggerAppCompatActivity() { @Inject lateinit var expensiveObject: ExpensiveObject + @Inject + lateinit var text: String + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_other) - - DaggerFeature1Component - .builder() - .coreComponent(CoreInjectHelper.provideCoreComponent(applicationContext)) - .build() - .inject(this) } }