Skip to content

Commit 3e98cd6

Browse files
committed
Working feature injection
1 parent 4018b56 commit 3e98cd6

File tree

18 files changed

+240
-29
lines changed

18 files changed

+240
-29
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ android {
4949
}
5050

5151
dependencies {
52-
implementation project(":core")
52+
api project(":core")
5353

5454
kapt 'com.google.dagger:dagger-compiler:2.27'
5555
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,44 @@
11
package cz.skywall.multimoduleexample
22

33
import android.app.Application
4+
import android.content.SharedPreferences
5+
import cz.skywall.multimoduleexample.core.injection.CoreSubcomponent
6+
import cz.skywall.multimoduleexample.core.injection.DaggerModulesComponent
7+
import cz.skywall.multimoduleexample.core.mapper.toDB
8+
import cz.skywall.multimoduleexample.database.UserDao
9+
import cz.skywall.multimoduleexample.injection.DaggerApplicationComponent
10+
import cz.skywall.multimoduleexample.network.ApiService
11+
import kotlinx.coroutines.runBlocking
12+
import javax.inject.Inject
413

514
class App : Application() {
615

16+
@Inject lateinit var sharedPreferences: SharedPreferences
17+
@Inject lateinit var apiService: ApiService
18+
@Inject lateinit var userDao: UserDao
19+
20+
private val modulesComponent by lazy {
21+
DaggerModulesComponent.factory().create()
22+
}
23+
24+
private val applicationComponent by lazy {
25+
DaggerApplicationComponent.factory()
26+
.create(this, coreSubcomponent)
27+
}
28+
29+
val coreSubcomponent: CoreSubcomponent by lazy {
30+
modulesComponent.coreSubcomponentFactory().create(this)
31+
}
32+
33+
override fun onCreate() {
34+
super.onCreate()
35+
36+
applicationComponent.inject(this)
37+
38+
sharedPreferences.all
39+
runBlocking {
40+
val user = apiService.getUser()
41+
userDao.insertUser(user.toDB())
42+
}
43+
}
744
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package cz.skywall.multimoduleexample.injection
2+
3+
import cz.skywall.multimoduleexample.App
4+
import cz.skywall.multimoduleexample.core.injection.CoreSubcomponent
5+
import dagger.BindsInstance
6+
import dagger.Component
7+
8+
@Component(
9+
modules = [
10+
ApplicationModule::class
11+
],
12+
dependencies = [
13+
CoreSubcomponent::class
14+
]
15+
)
16+
interface ApplicationComponent {
17+
18+
@Component.Factory
19+
interface Factory {
20+
fun create(@BindsInstance app: App, coreSubcomponent: CoreSubcomponent): ApplicationComponent
21+
}
22+
23+
fun inject(app: App)
24+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cz.skywall.multimoduleexample.injection
2+
3+
import android.app.Application
4+
import android.content.res.Resources
5+
import dagger.Module
6+
7+
@Module
8+
class ApplicationModule{
9+
10+
fun resources(application: Application): Resources {
11+
return application.resources
12+
}
13+
}

core/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ android {
3838
}
3939

4040
dependencies {
41-
implementation project(":database")
42-
implementation project(":network")
41+
api project(":database")
42+
api project(":network")
4343

4444
kapt 'com.google.dagger:dagger-compiler:2.27'
4545
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cz.skywall.multimoduleexample.core.injection
2+
3+
import android.app.Application
4+
import android.content.Context
5+
import android.content.SharedPreferences
6+
import dagger.Module
7+
import dagger.Provides
8+
9+
@Module
10+
class CoreModule {
11+
12+
@Provides
13+
fun sharedPreferences(application: Application): SharedPreferences {
14+
return application.getSharedPreferences("sp", Context.MODE_PRIVATE)
15+
}
16+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package cz.skywall.multimoduleexample.core.injection
2+
3+
import android.app.Application
4+
import android.content.SharedPreferences
5+
import cz.skywall.multimoduleexample.database.DatabaseModule
6+
import cz.skywall.multimoduleexample.database.UserDao
7+
import cz.skywall.multimoduleexample.network.ApiService
8+
import cz.skywall.multimoduleexample.network.NetworkModule
9+
import dagger.BindsInstance
10+
import dagger.Subcomponent
11+
12+
@Subcomponent(
13+
modules = [
14+
CoreModule::class,
15+
DatabaseModule::class,
16+
NetworkModule::class
17+
]
18+
)
19+
interface CoreSubcomponent {
20+
21+
@Subcomponent.Factory
22+
interface Factory {
23+
fun create(@BindsInstance application: Application): CoreSubcomponent
24+
}
25+
26+
fun userDao(): UserDao
27+
28+
fun apiService(): ApiService
29+
30+
fun sharedPreference(): SharedPreferences
31+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cz.skywall.multimoduleexample.core.injection
2+
3+
import dagger.Component
4+
5+
@Component
6+
interface ModulesComponent {
7+
8+
@Component.Factory
9+
interface Factory {
10+
fun create(): ModulesComponent
11+
}
12+
13+
fun coreSubcomponentFactory(): CoreSubcomponent.Factory
14+
15+
}

core_dependencies.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ dependencies {
1616
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0-alpha05'
1717

1818
api 'com.google.dagger:dagger:2.27'
19+
api "com.google.dagger:dagger-android-support:2.27"
1920
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cz.skywall.multimoduleexample.database
2+
3+
import android.app.Application
4+
import dagger.Module
5+
import dagger.Provides
6+
7+
@Module
8+
class DatabaseModule {
9+
10+
@Provides
11+
fun userDao(application: Application) : UserDao {
12+
return UserDao(application)
13+
}
14+
}

0 commit comments

Comments
 (0)