From 56c9ec6595f14d59c5af6173483a93952ec5bb58 Mon Sep 17 00:00:00 2001 From: "a.sumin" Date: Tue, 9 Nov 2021 00:32:27 +0300 Subject: [PATCH 1/6] Fields injection --- .../example1/Activity.kt | 17 +++++++-------- .../example1/Component.kt | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt index a91a1eb..1e207dd 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt @@ -2,13 +2,10 @@ package com.example.dependencyinjectionstart.example1 class Activity { - val monitor = Monitor() - val keyboard = Keyboard() - val mouse = Mouse() - val computerTower = ComputerTower( - Storage(), - Memory(), - Processor() - ) - val computer = Computer(monitor, computerTower, keyboard, mouse) -} \ No newline at end of file + lateinit var computer: Computer + lateinit var keyboard: Keyboard + + init { + Component().inject(this) + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt new file mode 100644 index 0000000..ff4a685 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt @@ -0,0 +1,21 @@ +package com.example.dependencyinjectionstart.example1 + +class Component { + + private fun getComputer(): Computer { + val monitor = Monitor() + val keyboard = Keyboard() + val mouse = Mouse() + val computerTower = ComputerTower( + Storage(), + Memory(), + Processor() + ) + return Computer(monitor, computerTower, keyboard, mouse) + } + + fun inject(activity: Activity) { + activity.computer = getComputer() + activity.keyboard = Keyboard() + } +} From 9a9028e3c24717c37c4bcda58fbd1d46b3916b66 Mon Sep 17 00:00:00 2001 From: "a.sumin" Date: Wed, 10 Nov 2021 21:21:04 +0300 Subject: [PATCH 2/6] Add dagger 2 dependencies --- app/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index f5445fb..4cc861e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.application' id 'kotlin-android' + id 'kotlin-kapt' } android { @@ -33,6 +34,8 @@ android { dependencies { + implementation 'com.google.dagger:dagger:2.35.1' + kapt 'com.google.dagger:dagger-compiler:2.35.1' implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' From 66e9fb4cc1561cff364c1196a9e2afa21cbefd14 Mon Sep 17 00:00:00 2001 From: "a.sumin" Date: Wed, 10 Nov 2021 21:52:22 +0300 Subject: [PATCH 3/6] Inject fields by Dagger2 --- .../dependencyinjectionstart/example1/Activity.kt | 12 ++++++++++-- .../example1/Component.kt | 3 +-- .../dependencyinjectionstart/example1/Keyboard.kt | 4 +++- .../dependencyinjectionstart/example1/Monitor.kt | 4 +++- .../dependencyinjectionstart/example1/Mouse.kt | 4 +++- .../example1/NewComponent.kt | 15 +++++++++++++++ .../example2/presentation/MainActivity.kt | 5 +++++ 7 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt index 1e207dd..e531245 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt @@ -1,11 +1,19 @@ package com.example.dependencyinjectionstart.example1 +import javax.inject.Inject + class Activity { - lateinit var computer: Computer + @Inject lateinit var keyboard: Keyboard + @Inject + lateinit var mouse: Mouse + + @Inject + lateinit var monitor: Monitor + init { - Component().inject(this) + DaggerNewComponent.create().inject(this) } } diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt index ff4a685..e8c52f2 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt @@ -15,7 +15,6 @@ class Component { } fun inject(activity: Activity) { - activity.computer = getComputer() - activity.keyboard = Keyboard() +// activity.keyboard = Keyboard() } } diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt index a0e524d..d46cf82 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt @@ -1,4 +1,6 @@ package com.example.dependencyinjectionstart.example1 -class Keyboard { +import javax.inject.Inject + +class Keyboard @Inject constructor() { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt index bf8220b..bd04e5f 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt @@ -1,4 +1,6 @@ package com.example.dependencyinjectionstart.example1 -class Monitor { +import javax.inject.Inject + +class Monitor @Inject constructor() { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt index 858c800..ca6d11d 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt @@ -1,4 +1,6 @@ package com.example.dependencyinjectionstart.example1 -class Mouse { +import javax.inject.Inject + +class Mouse @Inject constructor() { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt new file mode 100644 index 0000000..4091ae1 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt @@ -0,0 +1,15 @@ +package com.example.dependencyinjectionstart.example1 + +import dagger.Component + +@Component +interface NewComponent { + + fun getKeyboard(): Keyboard + + fun getMouse(): Mouse + + fun getMonitor(): Monitor + + fun inject(activity: Activity) +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt index 84775ec..21fb800 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt @@ -3,10 +3,15 @@ package com.example.dependencyinjectionstart.example2.presentation import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.dependencyinjectionstart.R +import com.example.dependencyinjectionstart.example1.Activity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + val activity = Activity() + activity.keyboard.toString() + activity.mouse.toString() + activity.monitor.toString() } } \ No newline at end of file From 970ed07f4fec6cb337f2ab88d07663b92ca103dc Mon Sep 17 00:00:00 2001 From: "a.sumin" Date: Wed, 10 Nov 2021 22:39:14 +0300 Subject: [PATCH 4/6] Use provides methods --- .../example1/Activity.kt | 8 +-- .../example1/Computer.kt | 2 +- .../example1/ComputerModule.kt | 57 +++++++++++++++++++ .../example1/Keyboard.kt | 4 +- .../example1/Monitor.kt | 4 +- .../example1/Mouse.kt | 4 +- .../example1/NewComponent.kt | 8 +-- .../example2/presentation/MainActivity.kt | 4 +- 8 files changed, 64 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt index e531245..6ba6934 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt @@ -5,13 +5,7 @@ import javax.inject.Inject class Activity { @Inject - lateinit var keyboard: Keyboard - - @Inject - lateinit var mouse: Mouse - - @Inject - lateinit var monitor: Monitor + lateinit var computer: Computer init { DaggerNewComponent.create().inject(this) diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Computer.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Computer.kt index 30d1e0d..f301e18 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Computer.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Computer.kt @@ -1,6 +1,6 @@ package com.example.dependencyinjectionstart.example1 -class Computer( +class Computer ( val monitor: Monitor, val computerTower: ComputerTower, val keyboard: Keyboard, diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt new file mode 100644 index 0000000..3a1dc65 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt @@ -0,0 +1,57 @@ +package com.example.dependencyinjectionstart.example1 + +import dagger.Module +import dagger.Provides + +@Module +class ComputerModule { + + @Provides + fun provideMonitor(): Monitor { + return Monitor() + } + + @Provides + fun provideKeyboard(): Keyboard { + return Keyboard() + } + + @Provides + fun provideMouse(): Mouse { + return Mouse() + } + + @Provides + fun provideStorage(): Storage { + return Storage() + } + + @Provides + fun provideMemory(): Memory { + return Memory() + } + + @Provides + fun provideProcessor(): Processor { + return Processor() + } + + @Provides + fun provideComputerTower( + memory: Memory, + processor: Processor, + storage: Storage + ): ComputerTower { + return ComputerTower(storage, memory, processor) + } + + @Provides + fun provideComputer( + monitor: Monitor, + computerTower: ComputerTower, + keyboard: Keyboard, + mouse: Mouse, + ): Computer { + return Computer(monitor, computerTower, keyboard, mouse) + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt index d46cf82..a0e524d 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Keyboard.kt @@ -1,6 +1,4 @@ package com.example.dependencyinjectionstart.example1 -import javax.inject.Inject - -class Keyboard @Inject constructor() { +class Keyboard { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt index bd04e5f..bf8220b 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Monitor.kt @@ -1,6 +1,4 @@ package com.example.dependencyinjectionstart.example1 -import javax.inject.Inject - -class Monitor @Inject constructor() { +class Monitor { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt index ca6d11d..858c800 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Mouse.kt @@ -1,6 +1,4 @@ package com.example.dependencyinjectionstart.example1 -import javax.inject.Inject - -class Mouse @Inject constructor() { +class Mouse { } \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt index 4091ae1..714d064 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt @@ -2,14 +2,8 @@ package com.example.dependencyinjectionstart.example1 import dagger.Component -@Component +@Component(modules = [ComputerModule::class]) interface NewComponent { - fun getKeyboard(): Keyboard - - fun getMouse(): Mouse - - fun getMonitor(): Monitor - fun inject(activity: Activity) } diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt index 21fb800..e81bcaf 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt @@ -10,8 +10,6 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val activity = Activity() - activity.keyboard.toString() - activity.mouse.toString() - activity.monitor.toString() + activity.computer.toString() } } \ No newline at end of file From 9188414aec76049534bcc4fb675dcc5e651181c0 Mon Sep 17 00:00:00 2001 From: "a.sumin" Date: Wed, 10 Nov 2021 22:53:28 +0300 Subject: [PATCH 5/6] Prepare example2 --- .../example2/data/ExampleApiService.kt | 8 -------- .../example2/data/ExampleDatabase.kt | 8 -------- .../example2/data/ExampleLocalDataSource.kt | 6 ------ .../data/ExampleLocalDataSourceImpl.kt | 10 ---------- .../example2/data/ExampleMapper.kt | 8 -------- .../example2/data/ExampleRemoteDataSource.kt | 6 ------ .../data/ExampleRemoteDataSourceImpl.kt | 10 ---------- .../example2/data/ExampleRepositoryImpl.kt | 13 ------------- .../example2/data/database/ExampleDatabase.kt | 15 +++++++++++++++ .../data/datasource/ExampleLocalDataSource.kt | 6 ++++++ .../datasource/ExampleLocalDataSourceImpl.kt | 12 ++++++++++++ .../datasource/ExampleRemoteDataSource.kt | 6 ++++++ .../datasource/ExampleRemoteDataSourceImpl.kt | 12 ++++++++++++ .../example2/data/mapper/ExampleMapper.kt | 8 ++++++++ .../data/network/ExampleApiService.kt | 15 +++++++++++++++ .../data/repository/ExampleRepositoryImpl.kt | 19 +++++++++++++++++++ .../example2/domain/ExampleUseCase.kt | 2 +- .../example2/presentation/ExampleViewModel.kt | 2 +- .../example2/presentation/MainActivity.kt | 6 ++++-- 19 files changed, 99 insertions(+), 73 deletions(-) delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleApiService.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleDatabase.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSource.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSourceImpl.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleMapper.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSource.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSourceImpl.kt delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRepositoryImpl.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSource.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSource.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleApiService.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleApiService.kt deleted file mode 100644 index f9a50aa..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleApiService.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -class ExampleApiService { - - fun method() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleDatabase.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleDatabase.kt deleted file mode 100644 index 2a5faf9..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleDatabase.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -class ExampleDatabase { - - fun method() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSource.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSource.kt deleted file mode 100644 index a3426c2..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSource.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -interface ExampleLocalDataSource { - - fun method() -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSourceImpl.kt deleted file mode 100644 index fa13972..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleLocalDataSourceImpl.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -class ExampleLocalDataSourceImpl( - private val database: ExampleDatabase -) : ExampleLocalDataSource { - - override fun method() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleMapper.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleMapper.kt deleted file mode 100644 index cc3c4c4..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleMapper.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -class ExampleMapper { - - fun map() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSource.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSource.kt deleted file mode 100644 index eb7016a..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSource.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -interface ExampleRemoteDataSource { - - fun method() -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSourceImpl.kt deleted file mode 100644 index 89d9acd..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRemoteDataSourceImpl.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -class ExampleRemoteDataSourceImpl( - private val apiService: ExampleApiService -) : ExampleRemoteDataSource { - - override fun method() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRepositoryImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRepositoryImpl.kt deleted file mode 100644 index bad06de..0000000 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/ExampleRepositoryImpl.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.dependencyinjectionstart.example2.data - -import com.example.dependencyinjectionstart.example2.domain.ExampleRepository - -class ExampleRepositoryImpl( - private val localDataSource: ExampleLocalDataSource, - private val remoteDataSource: ExampleRemoteDataSource -) : ExampleRepository { - - override fun method() { - - } -} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt new file mode 100644 index 0000000..5be8490 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt @@ -0,0 +1,15 @@ +package com.example.dependencyinjectionstart.example2.data.database + +import android.util.Log + +class ExampleDatabase { + + fun method() { + Log.d(LOG_TAG, "ExampleDatabase") + } + + companion object { + + private const val LOG_TAG = "EXAMPLE_TEST" + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSource.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSource.kt new file mode 100644 index 0000000..8e1a2ea --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSource.kt @@ -0,0 +1,6 @@ +package com.example.dependencyinjectionstart.example2.data.datasource + +interface ExampleLocalDataSource { + + fun method() +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt new file mode 100644 index 0000000..71d1aaf --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt @@ -0,0 +1,12 @@ +package com.example.dependencyinjectionstart.example2.data.datasource + +import com.example.dependencyinjectionstart.example2.data.database.ExampleDatabase + +class ExampleLocalDataSourceImpl( + private val database: ExampleDatabase +) : ExampleLocalDataSource { + + override fun method() { + database.method() + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSource.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSource.kt new file mode 100644 index 0000000..15f84d0 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSource.kt @@ -0,0 +1,6 @@ +package com.example.dependencyinjectionstart.example2.data.datasource + +interface ExampleRemoteDataSource { + + fun method() +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt new file mode 100644 index 0000000..bd9c011 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt @@ -0,0 +1,12 @@ +package com.example.dependencyinjectionstart.example2.data.datasource + +import com.example.dependencyinjectionstart.example2.data.network.ExampleApiService + +class ExampleRemoteDataSourceImpl( + private val apiService: ExampleApiService +) : ExampleRemoteDataSource { + + override fun method() { + apiService.method() + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt new file mode 100644 index 0000000..fe3cde5 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt @@ -0,0 +1,8 @@ +package com.example.dependencyinjectionstart.example2.data.mapper + +class ExampleMapper { + + fun map() { + + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt new file mode 100644 index 0000000..644b25d --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt @@ -0,0 +1,15 @@ +package com.example.dependencyinjectionstart.example2.data.network + +import android.util.Log + +class ExampleApiService { + + fun method() { + Log.d(LOG_TAG, "ExampleApiService") + } + + companion object { + + private const val LOG_TAG = "EXAMPLE_TEST" + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt new file mode 100644 index 0000000..6e0fbd0 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt @@ -0,0 +1,19 @@ +package com.example.dependencyinjectionstart.example2.data.repository + +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleLocalDataSource +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleRemoteDataSource +import com.example.dependencyinjectionstart.example2.data.mapper.ExampleMapper +import com.example.dependencyinjectionstart.example2.domain.ExampleRepository + +class ExampleRepositoryImpl( + private val localDataSource: ExampleLocalDataSource, + private val remoteDataSource: ExampleRemoteDataSource, + private val mapper: ExampleMapper +) : ExampleRepository { + + override fun method() { + mapper.map() + localDataSource.method() + remoteDataSource.method() + } +} diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt index eff238d..96190ac 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt @@ -5,6 +5,6 @@ class ExampleUseCase( ) { operator fun invoke() { - + repository.method() } } diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt index f0ab118..2a60f09 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt @@ -7,6 +7,6 @@ class ExampleViewModel( ) { fun method() { - + useCase() } } diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt index e81bcaf..968735a 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt @@ -6,10 +6,12 @@ import com.example.dependencyinjectionstart.R import com.example.dependencyinjectionstart.example1.Activity class MainActivity : AppCompatActivity() { + + lateinit var viewModel: ExampleViewModel + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - val activity = Activity() - activity.computer.toString() + viewModel.method() } } \ No newline at end of file From 722368a95afd95c818a90fc8f8901d2951589c61 Mon Sep 17 00:00:00 2001 From: Sultan Date: Sun, 30 Oct 2022 17:58:46 +0500 Subject: [PATCH 6/6] added dagger 2 --- .../example2/data/database/ExampleDatabase.kt | 3 ++- .../datasource/ExampleLocalDataSourceImpl.kt | 3 ++- .../datasource/ExampleRemoteDataSourceImpl.kt | 3 ++- .../example2/data/mapper/ExampleMapper.kt | 4 +++- .../data/network/ExampleApiService.kt | 3 ++- .../data/repository/ExampleRepositoryImpl.kt | 3 ++- .../example2/di/AppComponent.kt | 10 ++++++++ .../example2/di/DataModule.kt | 24 +++++++++++++++++++ .../example2/di/DomainModule.kt | 15 ++++++++++++ .../example2/domain/ExampleUseCase.kt | 4 +++- .../example2/presentation/ExampleViewModel.kt | 3 ++- .../example2/presentation/MainActivity.kt | 9 ++++++- 12 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/AppComponent.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt index 5be8490..581db63 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt @@ -1,8 +1,9 @@ package com.example.dependencyinjectionstart.example2.data.database import android.util.Log +import javax.inject.Inject -class ExampleDatabase { +class ExampleDatabase @Inject constructor(){ fun method() { Log.d(LOG_TAG, "ExampleDatabase") diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt index 71d1aaf..53564b3 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt @@ -1,8 +1,9 @@ package com.example.dependencyinjectionstart.example2.data.datasource import com.example.dependencyinjectionstart.example2.data.database.ExampleDatabase +import javax.inject.Inject -class ExampleLocalDataSourceImpl( +class ExampleLocalDataSourceImpl @Inject constructor( private val database: ExampleDatabase ) : ExampleLocalDataSource { diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt index bd9c011..fbae057 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt @@ -1,8 +1,9 @@ package com.example.dependencyinjectionstart.example2.data.datasource import com.example.dependencyinjectionstart.example2.data.network.ExampleApiService +import javax.inject.Inject -class ExampleRemoteDataSourceImpl( +class ExampleRemoteDataSourceImpl @Inject constructor( private val apiService: ExampleApiService ) : ExampleRemoteDataSource { diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt index fe3cde5..76cb8fd 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt @@ -1,6 +1,8 @@ package com.example.dependencyinjectionstart.example2.data.mapper -class ExampleMapper { +import javax.inject.Inject + +class ExampleMapper @Inject constructor(){ fun map() { diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt index 644b25d..ff8e588 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt @@ -1,8 +1,9 @@ package com.example.dependencyinjectionstart.example2.data.network import android.util.Log +import javax.inject.Inject -class ExampleApiService { +class ExampleApiService @Inject constructor(){ fun method() { Log.d(LOG_TAG, "ExampleApiService") diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt index 6e0fbd0..deeb3ac 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt @@ -4,8 +4,9 @@ import com.example.dependencyinjectionstart.example2.data.datasource.ExampleLoca import com.example.dependencyinjectionstart.example2.data.datasource.ExampleRemoteDataSource import com.example.dependencyinjectionstart.example2.data.mapper.ExampleMapper import com.example.dependencyinjectionstart.example2.domain.ExampleRepository +import javax.inject.Inject -class ExampleRepositoryImpl( +class ExampleRepositoryImpl @Inject constructor( private val localDataSource: ExampleLocalDataSource, private val remoteDataSource: ExampleRemoteDataSource, private val mapper: ExampleMapper diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/AppComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/AppComponent.kt new file mode 100644 index 0000000..c41fa79 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/AppComponent.kt @@ -0,0 +1,10 @@ +package com.example.dependencyinjectionstart.example2.di + +import com.example.dependencyinjectionstart.example2.presentation.MainActivity +import dagger.Component + +@Component(modules = [DataModule::class, DomainModule::class]) +interface AppComponent { + + fun inject(mainActivity: MainActivity) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt new file mode 100644 index 0000000..1ea8c9a --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt @@ -0,0 +1,24 @@ +package com.example.dependencyinjectionstart.example2.di + +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleLocalDataSource +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleLocalDataSourceImpl +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleRemoteDataSource +import com.example.dependencyinjectionstart.example2.data.datasource.ExampleRemoteDataSourceImpl +import dagger.Module +import dagger.Provides + +@Module +class DataModule { + + @Provides + fun provideLocalDataSource(impl : ExampleLocalDataSourceImpl) : ExampleLocalDataSource { + return impl + } + + @Provides + fun provideRemoteDataSource(impl : ExampleRemoteDataSourceImpl) : ExampleRemoteDataSource { + return impl + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt new file mode 100644 index 0000000..f89d430 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt @@ -0,0 +1,15 @@ +package com.example.dependencyinjectionstart.example2.di + +import com.example.dependencyinjectionstart.example2.data.repository.ExampleRepositoryImpl +import com.example.dependencyinjectionstart.example2.domain.ExampleRepository +import dagger.Module +import dagger.Provides + +@Module +class DomainModule { + + @Provides + fun provideExampleRepository(impl : ExampleRepositoryImpl) : ExampleRepository { + return impl + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt index 96190ac..5d4a148 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/domain/ExampleUseCase.kt @@ -1,6 +1,8 @@ package com.example.dependencyinjectionstart.example2.domain -class ExampleUseCase( +import javax.inject.Inject + +class ExampleUseCase @Inject constructor( private val repository: ExampleRepository ) { diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt index 2a60f09..8461d84 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel.kt @@ -1,8 +1,9 @@ package com.example.dependencyinjectionstart.example2.presentation import com.example.dependencyinjectionstart.example2.domain.ExampleUseCase +import javax.inject.Inject -class ExampleViewModel( +class ExampleViewModel @Inject constructor( private val useCase: ExampleUseCase ) { diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt index 968735a..bac4f59 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity.kt @@ -4,10 +4,17 @@ import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.dependencyinjectionstart.R import com.example.dependencyinjectionstart.example1.Activity +import com.example.dependencyinjectionstart.example1.DaggerNewComponent +import com.example.dependencyinjectionstart.example2.di.DaggerAppComponent +import javax.inject.Inject class MainActivity : AppCompatActivity() { - lateinit var viewModel: ExampleViewModel + @Inject lateinit var viewModel: ExampleViewModel + + init { + DaggerAppComponent.create().inject(this) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)