Skip to content

Commit

Permalink
multi-module with dagger-android after refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcos Holgado committed Dec 21, 2018
1 parent 9ec7be8 commit 7cd13ac
Show file tree
Hide file tree
Showing 12 changed files with 83 additions and 68 deletions.
14 changes: 12 additions & 2 deletions 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<out DaggerApplication> {
return DaggerAppComponent
.builder()
.application(this)
.coreComponent(provideCoreComponent())
.build()
}

override fun provideCoreComponent(): CoreComponent {
if (!this::coreComponent.isInitialized) {
coreComponent = DaggerCoreComponent
Expand Down
Expand Up @@ -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))
}
Expand Down
@@ -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
}
@@ -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<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): AppComponent.Builder
fun coreComponent(coreComponent: CoreComponent): AppComponent.Builder
fun build(): AppComponent
}
}
@@ -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()
}
@@ -0,0 +1,7 @@
package com.marcosholgado.daggerplayground.di

import javax.inject.Scope

@Scope
@Retention
annotation class AppScope

This file was deleted.

This file was deleted.

@@ -0,0 +1,3 @@
package com.marcosholgado.daggerplayground

class OtherObject
14 changes: 0 additions & 14 deletions core/src/main/java/com/marcosholgado/core/di/CoreInjectHelper.kt

This file was deleted.

This file was deleted.

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

0 comments on commit 7cd13ac

Please sign in to comment.