From 8ac8cbbb4fde5cb7604e4ddd8817878ed9c8d837 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sat, 19 Feb 2022 16:44:13 +0300
Subject: [PATCH 01/13] Create Component and inject()
---
.../example1/Activity.kt | 14 +++++--------
.../example1/Component.kt | 20 +++++++++++++++++++
2 files changed, 25 insertions(+), 9 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..b0c1740 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,9 @@ 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)
+ lateinit var computer: Computer
+
+ init {
+ Component().inject(this)
+ }
}
\ No newline at end of file
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..f821dcc
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt
@@ -0,0 +1,20 @@
+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()
+ }
+}
\ No newline at end of file
From 6513715a9b581478c8630625487a90a5c517ca1f Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sat, 19 Feb 2022 16:59:35 +0300
Subject: [PATCH 02/13] Add dagger 2 dependencies
---
app/build.gradle | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index f5445fb..9e69c13 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 {
@@ -34,9 +35,13 @@ android {
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
- implementation 'androidx.appcompat:appcompat:1.3.1'
- implementation 'com.google.android.material:material:1.4.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+
+ implementation 'com.google.dagger:dagger:2.39.1'
+ kapt 'com.google.dagger:dagger-compiler:2.39.1'
+
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
From f3982b199b1b2c9e814dc42e0309120bcb565db0 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sat, 19 Feb 2022 17:40:26 +0300
Subject: [PATCH 03/13] create dagger component
---
.../dependencyinjectionstart/example1/Activity.kt | 13 +++++++++++--
.../dependencyinjectionstart/example1/Component.kt | 2 +-
.../dependencyinjectionstart/example1/Keyboard.kt | 4 +++-
.../dependencyinjectionstart/example1/Monitor.kt | 4 +++-
.../dependencyinjectionstart/example1/Mouse.kt | 4 +++-
.../example1/MyComponent.kt | 13 +++++++++++++
.../example2/presentation/MainActivity.kt | 5 +++++
7 files changed, 39 insertions(+), 6 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.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 b0c1740..c9fdea5 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt
@@ -1,10 +1,19 @@
package com.example.dependencyinjectionstart.example1
+import javax.inject.Inject
+
class Activity {
- lateinit var computer: Computer
+ private val component = DaggerMyComponent.create()
+
+ val keyboard: Keyboard = component.getKeyboard()
+
+ @Inject
+ lateinit var mouse: Mouse
+
+ val monitor: Monitor = component.getMonitor()
init {
- Component().inject(this)
+ DaggerMyComponent.create().inject(this)
}
}
\ No newline at end of file
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 f821dcc..22a1e5c 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Component.kt
@@ -15,6 +15,6 @@ class Component {
}
fun inject(activity: Activity) {
- activity.computer = getComputer()
+// activity.keyboard = Keyboard()
}
}
\ No newline at end of file
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/MyComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.kt
new file mode 100644
index 0000000..b7a648a
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.kt
@@ -0,0 +1,13 @@
+package com.example.dependencyinjectionstart.example1
+
+import dagger.Component
+
+@Component
+interface MyComponent {
+
+ fun getMonitor(): Monitor
+
+ fun getKeyboard(): Keyboard
+
+ fun inject(activity: Activity)
+}
\ No newline at end of file
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 5e30b133533018079c039170c858655409922f77 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sat, 19 Feb 2022 22:58:54 +0300
Subject: [PATCH 04/13] create Module and Provides
---
.../example1/Activity.kt | 8 +--
.../example1/Computer.kt | 2 +-
.../example1/ComputerModule.kt | 60 +++++++++++++++++++
.../example1/ComputerTower.kt | 2 +-
.../example1/Keyboard.kt | 4 +-
.../example1/Monitor.kt | 4 +-
.../example1/Mouse.kt | 4 +-
.../example1/MyComponent.kt | 6 +-
.../example2/presentation/MainActivity.kt | 4 +-
9 files changed, 68 insertions(+), 26 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 c9fdea5..9f43c01 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt
@@ -4,14 +4,8 @@ import javax.inject.Inject
class Activity {
- private val component = DaggerMyComponent.create()
-
- val keyboard: Keyboard = component.getKeyboard()
-
@Inject
- lateinit var mouse: Mouse
-
- val monitor: Monitor = component.getMonitor()
+ lateinit var computer: Computer
init {
DaggerMyComponent.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..e737dd1
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt
@@ -0,0 +1,60 @@
+package com.example.dependencyinjectionstart.example1
+
+import dagger.Module
+import dagger.Provides
+
+
+// Если у нас нет доступа к классу (например, библиотеку), то с помощью модуля мы можем создать
+// экземпляр класса с помощью Модуля и его провайдера
+@Module
+class ComputerModule {
+
+ @Provides
+ fun provideMonitor(): Monitor {
+ return Monitor()
+ }
+
+ @Provides
+ fun provideProcessor(): Processor {
+ return Processor()
+ }
+
+ @Provides
+ fun provideMemory(): Memory {
+ return Memory()
+ }
+
+ @Provides
+ fun provideStorage(): Storage {
+ return Storage()
+ }
+
+ @Provides
+ fun provideMouse(): Mouse {
+ return Mouse()
+ }
+
+ @Provides
+ fun provideKeyboard(): Keyboard {
+ return Keyboard()
+ }
+
+ @Provides
+ fun provideComputerTower(
+ storage: Storage,
+ memory: Memory,
+ processor: Processor
+ ): ComputerTower {
+ return ComputerTower(storage, memory, processor)
+ }
+
+ @Provides
+ fun provideComputer(
+ monitor: Monitor,
+ computerTower: ComputerTower,
+ keyboard: Keyboard,
+ mouse: Mouse
+ ): Computer {
+ return Computer(monitor, computerTower, keyboard, mouse)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerTower.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerTower.kt
index 2cf8e18..8d742e8 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerTower.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerTower.kt
@@ -1,6 +1,6 @@
package com.example.dependencyinjectionstart.example1
-class ComputerTower(
+class ComputerTower (
val storage: Storage,
val memory: Memory,
val processor: Processor
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/MyComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.kt
index b7a648a..36cc7fe 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/MyComponent.kt
@@ -2,12 +2,8 @@ package com.example.dependencyinjectionstart.example1
import dagger.Component
-@Component
+@Component(modules = [ComputerModule::class])
interface MyComponent {
- fun getMonitor(): Monitor
-
- fun getKeyboard(): Keyboard
-
fun inject(activity: Activity)
}
\ No newline at end of file
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 9025a7ebbc5d12dd5d89dedba743ce389a452503 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 13:22:21 +0300
Subject: [PATCH 05/13] use Binds
---
.../example1/ComputerModule.kt | 4 ++--
.../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 | 13 +++++++++++
.../datasource/ExampleRemoteDataSource.kt | 6 +++++
.../datasource/ExampleRemoteDataSourceImpl.kt | 13 +++++++++++
.../example2/data/mapper/ExampleMapper.kt | 10 +++++++++
.../data/network/ExampleApiService.kt | 15 +++++++++++++
.../data/repository/ExampleRepositoryImpl.kt | 20 +++++++++++++++++
.../example2/di/ApplicationComponent.kt | 11 ++++++++++
.../example2/di/DataModule.kt | 22 +++++++++++++++++++
.../example2/di/DomainModule.kt | 13 +++++++++++
.../example2/domain/ExampleUseCase.kt | 6 +++--
.../example2/presentation/ExampleViewModel.kt | 5 +++--
.../example2/presentation/MainActivity.kt | 12 ++++++++--
23 files changed, 163 insertions(+), 77 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
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.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/example1/ComputerModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt
index e737dd1..57e24fb 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/ComputerModule.kt
@@ -4,8 +4,8 @@ import dagger.Module
import dagger.Provides
-// Если у нас нет доступа к классу (например, библиотеку), то с помощью модуля мы можем создать
-// экземпляр класса с помощью Модуля и его провайдера
+// Если у нас нет доступа к классу (например, из библиотеки), то с помощью модуля мы можем создать
+// экземпляр класса
@Module
class ComputerModule {
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..912dbab
--- /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
+import javax.inject.Inject
+
+class ExampleDatabase @Inject constructor() {
+
+ 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..53564b3
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleLocalDataSourceImpl.kt
@@ -0,0 +1,13 @@
+package com.example.dependencyinjectionstart.example2.data.datasource
+
+import com.example.dependencyinjectionstart.example2.data.database.ExampleDatabase
+import javax.inject.Inject
+
+class ExampleLocalDataSourceImpl @Inject constructor(
+ 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..fbae057
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/datasource/ExampleRemoteDataSourceImpl.kt
@@ -0,0 +1,13 @@
+package com.example.dependencyinjectionstart.example2.data.datasource
+
+import com.example.dependencyinjectionstart.example2.data.network.ExampleApiService
+import javax.inject.Inject
+
+class ExampleRemoteDataSourceImpl @Inject constructor(
+ 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..e4543e4
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/mapper/ExampleMapper.kt
@@ -0,0 +1,10 @@
+package com.example.dependencyinjectionstart.example2.data.mapper
+
+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
new file mode 100644
index 0000000..7754bcb
--- /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
+import javax.inject.Inject
+
+class ExampleApiService @Inject constructor() {
+
+ 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..deeb3ac
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/repository/ExampleRepositoryImpl.kt
@@ -0,0 +1,20 @@
+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
+import javax.inject.Inject
+
+class ExampleRepositoryImpl @Inject constructor(
+ 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/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
new file mode 100644
index 0000000..bfa60ca
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -0,0 +1,11 @@
+package com.example.dependencyinjectionstart.example2.di
+
+import android.app.Activity
+import com.example.dependencyinjectionstart.example2.presentation.MainActivity
+import dagger.Component
+
+@Component(modules = [DataModule::class, DomainModule::class])
+interface ApplicationComponent {
+
+ fun inject(activity: 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..e9a1ef3
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt
@@ -0,0 +1,22 @@
+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.Binds
+import dagger.Module
+
+@Module
+interface DataModule {
+
+ @Binds
+ fun bindLocalDataSource(
+ localDataSource: ExampleLocalDataSourceImpl
+ ): ExampleLocalDataSource
+
+ @Binds
+ fun bindExampleRemoteDataSource (
+ remoteDataSource: ExampleRemoteDataSourceImpl
+ ): ExampleRemoteDataSource
+}
\ 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..769e5a0
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt
@@ -0,0 +1,13 @@
+package com.example.dependencyinjectionstart.example2.di
+
+import com.example.dependencyinjectionstart.example2.data.repository.ExampleRepositoryImpl
+import com.example.dependencyinjectionstart.example2.domain.ExampleRepository
+import dagger.Binds
+import dagger.Module
+
+@Module
+interface DomainModule {
+
+ @Binds
+ fun bindRepository(impl: ExampleRepositoryImpl): ExampleRepository
+}
\ 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 eff238d..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,10 +1,12 @@
package com.example.dependencyinjectionstart.example2.domain
-class ExampleUseCase(
+import javax.inject.Inject
+
+class ExampleUseCase @Inject constructor(
private val repository: ExampleRepository
) {
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..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,12 +1,13 @@
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
) {
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..f76e157 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,12 +4,20 @@ import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.dependencyinjectionstart.R
import com.example.dependencyinjectionstart.example1.Activity
+import com.example.dependencyinjectionstart.example2.di.DaggerApplicationComponent
+import javax.inject.Inject
class MainActivity : AppCompatActivity() {
+
+ @Inject
+ lateinit var viewModel: ExampleViewModel
+
+ private val component = DaggerApplicationComponent.create()
+
override fun onCreate(savedInstanceState: Bundle?) {
+ component.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- val activity = Activity()
- activity.computer.toString()
+ viewModel.method()
}
}
\ No newline at end of file
From 636778a1e2c235aa8c89ce2bc01aae810434eac2 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 15:19:58 +0300
Subject: [PATCH 06/13] use Component Builder
---
.../example2/data/database/ExampleDatabase.kt | 8 ++++++--
.../example2/data/network/ExampleApiService.kt | 12 ++++++++++--
.../example2/di/ApplicationComponent.kt | 2 +-
.../example2/di/ContextModule.kt | 15 +++++++++++++++
.../example2/di/DataModule.kt | 2 ++
.../example2/di/DomainModule.kt | 1 +
.../example2/presentation/MainActivity.kt | 9 ++++++++-
7 files changed, 43 insertions(+), 6 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.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 912dbab..acf67b5 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,12 +1,16 @@
package com.example.dependencyinjectionstart.example2.data.database
+import android.content.Context
import android.util.Log
+import com.example.dependencyinjectionstart.R
import javax.inject.Inject
-class ExampleDatabase @Inject constructor() {
+class ExampleDatabase @Inject constructor(
+ private val context: Context
+) {
fun method() {
- Log.d(LOG_TAG, "ExampleDatabase")
+ Log.d(LOG_TAG, "ExampleDatabase ${context.getString(R.string.app_name)}")
}
companion object {
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 7754bcb..0ab95f8 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,12 +1,20 @@
package com.example.dependencyinjectionstart.example2.data.network
+import android.app.Application
+import android.content.Context
import android.util.Log
+import com.example.dependencyinjectionstart.R
import javax.inject.Inject
-class ExampleApiService @Inject constructor() {
+class ExampleApiService @Inject constructor(
+ private val context: Context
+) {
fun method() {
- Log.d(LOG_TAG, "ExampleApiService")
+ Log.d(
+ LOG_TAG,
+ "ExampleApiService ${context.getString(R.string.app_name)}"
+ )
}
companion object {
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index bfa60ca..477861f 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -4,7 +4,7 @@ import android.app.Activity
import com.example.dependencyinjectionstart.example2.presentation.MainActivity
import dagger.Component
-@Component(modules = [DataModule::class, DomainModule::class])
+@Component(modules = [DataModule::class, DomainModule::class, ContextModule::class])
interface ApplicationComponent {
fun inject(activity: MainActivity)
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt
new file mode 100644
index 0000000..7063e72
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt
@@ -0,0 +1,15 @@
+package com.example.dependencyinjectionstart.example2.di
+
+import android.app.Application
+import android.content.Context
+import dagger.Module
+import dagger.Provides
+
+@Module
+class ContextModule(private val application: Application) {
+
+ @Provides
+ fun provideContext(): Context {
+ return application
+ }
+}
\ 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
index e9a1ef3..68151dc 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt
@@ -1,11 +1,13 @@
package com.example.dependencyinjectionstart.example2.di
+import android.content.Context
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.Binds
import dagger.Module
+import dagger.Provides
@Module
interface DataModule {
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
index 769e5a0..f764eff 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DomainModule.kt
@@ -4,6 +4,7 @@ import com.example.dependencyinjectionstart.example2.data.repository.ExampleRepo
import com.example.dependencyinjectionstart.example2.domain.ExampleRepository
import dagger.Binds
import dagger.Module
+import dagger.Provides
@Module
interface DomainModule {
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 f76e157..07042b8 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,7 +4,10 @@ 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.DaggerMyComponent
+import com.example.dependencyinjectionstart.example2.di.ContextModule
import com.example.dependencyinjectionstart.example2.di.DaggerApplicationComponent
+import com.example.dependencyinjectionstart.example2.di.DataModule
import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@@ -12,7 +15,11 @@ class MainActivity : AppCompatActivity() {
@Inject
lateinit var viewModel: ExampleViewModel
- private val component = DaggerApplicationComponent.create()
+ private val component by lazy {
+ DaggerApplicationComponent.builder()
+ .contextModule(ContextModule( application))
+ .build()
+ }
override fun onCreate(savedInstanceState: Bundle?) {
component.inject(this)
From 0f6f1474d1b186223a8f03099b669b1ede40873e Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 21:55:40 +0300
Subject: [PATCH 07/13] use ApplicationComponentBuilder
---
.../example2/data/database/ExampleDatabase.kt | 7 +++++--
.../example2/data/network/ExampleApiService.kt | 5 +++--
.../example2/di/ApplicationComponent.kt | 16 +++++++++++++++-
.../example2/di/ContextModule.kt | 15 ---------------
.../example2/presentation/MainActivity.kt | 7 ++-----
5 files changed, 25 insertions(+), 25 deletions(-)
delete mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.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 acf67b5..7601980 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
@@ -6,11 +6,14 @@ import com.example.dependencyinjectionstart.R
import javax.inject.Inject
class ExampleDatabase @Inject constructor(
- private val context: Context
+ private val context: Context,
+ private val timeMillis: Long
) {
fun method() {
- Log.d(LOG_TAG, "ExampleDatabase ${context.getString(R.string.app_name)}")
+ Log.d(
+ LOG_TAG,
+ "ExampleDatabase ${context.getString(R.string.app_name)} $timeMillis")
}
companion object {
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 0ab95f8..5a135f4 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
@@ -7,13 +7,14 @@ import com.example.dependencyinjectionstart.R
import javax.inject.Inject
class ExampleApiService @Inject constructor(
- private val context: Context
+ private val context: Context,
+ private val timeMillis: Long
) {
fun method() {
Log.d(
LOG_TAG,
- "ExampleApiService ${context.getString(R.string.app_name)}"
+ "ExampleApiService ${context.getString(R.string.app_name)} $timeMillis"
)
}
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index 477861f..b33b59a 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -1,11 +1,25 @@
package com.example.dependencyinjectionstart.example2.di
import android.app.Activity
+import android.content.Context
import com.example.dependencyinjectionstart.example2.presentation.MainActivity
+import dagger.BindsInstance
import dagger.Component
-@Component(modules = [DataModule::class, DomainModule::class, ContextModule::class])
+@Component(modules = [DataModule::class, DomainModule::class])
interface ApplicationComponent {
fun inject(activity: MainActivity)
+
+ @Component.Builder
+ interface ApplicationComponentBuilder {
+
+ @BindsInstance
+ fun context(context: Context): ApplicationComponentBuilder
+
+ @BindsInstance
+ fun time(timeMillis: Long): ApplicationComponentBuilder
+
+ fun build(): ApplicationComponent
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt
deleted file mode 100644
index 7063e72..0000000
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ContextModule.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.example.dependencyinjectionstart.example2.di
-
-import android.app.Application
-import android.content.Context
-import dagger.Module
-import dagger.Provides
-
-@Module
-class ContextModule(private val application: Application) {
-
- @Provides
- fun provideContext(): Context {
- return application
- }
-}
\ No newline at end of file
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 07042b8..535edfa 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,11 +3,7 @@ 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
-import com.example.dependencyinjectionstart.example1.DaggerMyComponent
-import com.example.dependencyinjectionstart.example2.di.ContextModule
import com.example.dependencyinjectionstart.example2.di.DaggerApplicationComponent
-import com.example.dependencyinjectionstart.example2.di.DataModule
import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@@ -17,7 +13,8 @@ class MainActivity : AppCompatActivity() {
private val component by lazy {
DaggerApplicationComponent.builder()
- .contextModule(ContextModule( application))
+ .context(application)
+ .time(System.currentTimeMillis())
.build()
}
From a0aa0b7111b550798497239258755bd99847d076 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 21:56:47 +0300
Subject: [PATCH 08/13] use ApplicationComponentBuilder
---
.../dependencyinjectionstart/example2/di/ApplicationComponent.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index b33b59a..66fe8d7 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -1,6 +1,5 @@
package com.example.dependencyinjectionstart.example2.di
-import android.app.Activity
import android.content.Context
import com.example.dependencyinjectionstart.example2.presentation.MainActivity
import dagger.BindsInstance
From d170b26253c765673171cc75e8a3810bdc4a750c Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 21:57:53 +0300
Subject: [PATCH 09/13] use ApplicationComponentBuilder
---
.../example2/data/network/ExampleApiService.kt | 1 -
1 file changed, 1 deletion(-)
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 5a135f4..3116f89 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,6 +1,5 @@
package com.example.dependencyinjectionstart.example2.data.network
-import android.app.Application
import android.content.Context
import android.util.Log
import com.example.dependencyinjectionstart.R
From 28e360a530c277589c481fe45ec896d3249419be Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Sun, 20 Feb 2022 23:45:23 +0300
Subject: [PATCH 10/13] use Component.Factory and Singleton
---
app/src/main/AndroidManifest.xml | 1 +
.../example2/ExampleApp.kt | 11 +++++++
.../example2/data/database/ExampleDatabase.kt | 4 ++-
.../data/network/ExampleApiService.kt | 4 ++-
.../example2/di/ApplicationComponent.kt | 30 ++++++++++++++-----
.../example2/presentation/MainActivity.kt | 8 ++---
6 files changed, 43 insertions(+), 15 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/ExampleApp.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 41253ba..d5d4f63 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
Date: Fri, 4 Mar 2022 12:12:02 +0300
Subject: [PATCH 11/13] create custom annotation scope
---
.../example2/data/database/ExampleDatabase.kt | 2 --
.../example2/data/network/ExampleApiService.kt | 2 --
.../example2/di/ApplicationComponent.kt | 2 +-
.../example2/di/ApplicationScope.kt | 7 +++++++
.../dependencyinjectionstart/example2/di/DataModule.kt | 5 +++--
5 files changed, 11 insertions(+), 7 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationScope.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 19fa09e..9811abc 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
@@ -4,9 +4,7 @@ import android.content.Context
import android.util.Log
import com.example.dependencyinjectionstart.R
import javax.inject.Inject
-import javax.inject.Singleton
-@Singleton
class ExampleDatabase @Inject constructor(
private val context: Context,
private val timeMillis: Long
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 99c8785..f89efc6 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
@@ -4,9 +4,7 @@ import android.content.Context
import android.util.Log
import com.example.dependencyinjectionstart.R
import javax.inject.Inject
-import javax.inject.Singleton
-@Singleton
class ExampleApiService @Inject constructor(
private val context: Context,
private val timeMillis: Long
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index 1f631a5..0effb64 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -9,7 +9,7 @@ import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
-@Singleton
+@ApplicationScope
@Component(modules = [DataModule::class, DomainModule::class])
interface ApplicationComponent {
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationScope.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationScope.kt
new file mode 100644
index 0000000..a566f7a
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationScope.kt
@@ -0,0 +1,7 @@
+package com.example.dependencyinjectionstart.example2.di
+
+import javax.inject.Scope
+
+@Scope
+@Retention(AnnotationRetention.RUNTIME)
+annotation class ApplicationScope
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
index 68151dc..6927877 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/DataModule.kt
@@ -1,22 +1,23 @@
package com.example.dependencyinjectionstart.example2.di
-import android.content.Context
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.Binds
import dagger.Module
-import dagger.Provides
+
@Module
interface DataModule {
+ @ApplicationScope
@Binds
fun bindLocalDataSource(
localDataSource: ExampleLocalDataSourceImpl
): ExampleLocalDataSource
+ @ApplicationScope
@Binds
fun bindExampleRemoteDataSource (
remoteDataSource: ExampleRemoteDataSourceImpl
From 26423bba0c444fed3ab242df1383a5ea6ef20379 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Fri, 4 Mar 2022 12:57:13 +0300
Subject: [PATCH 12/13] Inject ViewModel
---
.../example2/di/ApplicationComponent.kt | 2 +-
.../example2/di/ViewModelModule.kt | 23 +++++++++++++++++++
.../example2/presentation/ExampleViewModel.kt | 5 +++-
.../presentation/ExampleViewModel2.kt | 17 ++++++++++++++
.../example2/presentation/MainActivity.kt | 13 +++++++++--
.../example2/presentation/ViewModelFactory.kt | 13 +++++++++++
6 files changed, 69 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/di/ViewModelModule.kt
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel2.kt
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index 0effb64..1822021 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -10,7 +10,7 @@ import dagger.Component
import javax.inject.Singleton
@ApplicationScope
-@Component(modules = [DataModule::class, DomainModule::class])
+@Component(modules = [DataModule::class, DomainModule::class, ViewModelModule::class])
interface ApplicationComponent {
fun inject(activity: MainActivity)
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ViewModelModule.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ViewModelModule.kt
new file mode 100644
index 0000000..e6606da
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ViewModelModule.kt
@@ -0,0 +1,23 @@
+package com.example.dependencyinjectionstart.example2.di
+
+import androidx.lifecycle.ViewModel
+import com.example.dependencyinjectionstart.example2.presentation.ExampleViewModel
+import com.example.dependencyinjectionstart.example2.presentation.ExampleViewModel2
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.IntoMap
+import dagger.multibindings.StringKey
+
+@Module
+interface ViewModelModule {
+
+ @IntoMap
+ @StringKey("ExampleViewModel")
+ @Binds
+ fun bindExampleViewModel(impl: ExampleViewModel): ViewModel
+
+ @IntoMap
+ @StringKey("ExampleViewModel2")
+ @Binds
+ fun bindExampleViewModel2(impl: ExampleViewModel2): ViewModel
+}
\ No newline at end of file
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 8461d84..32bcd12 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,13 +1,16 @@
package com.example.dependencyinjectionstart.example2.presentation
+import android.util.Log
+import androidx.lifecycle.ViewModel
import com.example.dependencyinjectionstart.example2.domain.ExampleUseCase
import javax.inject.Inject
class ExampleViewModel @Inject constructor(
private val useCase: ExampleUseCase
-) {
+) : ViewModel() {
fun method() {
useCase()
+ Log.d("ExampleViewModel", "$this")
}
}
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel2.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel2.kt
new file mode 100644
index 0000000..b5a5180
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ExampleViewModel2.kt
@@ -0,0 +1,17 @@
+package com.example.dependencyinjectionstart.example2.presentation
+
+import android.util.Log
+import androidx.lifecycle.ViewModel
+import com.example.dependencyinjectionstart.example2.domain.ExampleRepository
+import com.example.dependencyinjectionstart.example2.domain.ExampleUseCase
+import javax.inject.Inject
+
+class ExampleViewModel2 @Inject constructor(
+ private val repository: ExampleRepository
+) : ViewModel() {
+
+ fun method() {
+ repository.method()
+ Log.d("ExampleViewModel", "$this")
+ }
+}
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 501dff1..152d04b 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
@@ -2,6 +2,7 @@ package com.example.dependencyinjectionstart.example2.presentation
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
import com.example.dependencyinjectionstart.R
import com.example.dependencyinjectionstart.example2.ExampleApp
import javax.inject.Inject
@@ -9,7 +10,15 @@ import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@Inject
- lateinit var viewModel: ExampleViewModel
+ lateinit var viewModelFactory: ViewModelFactory
+
+ private val viewModel by lazy {
+ ViewModelProvider(this, viewModelFactory) [ExampleViewModel::class.java]
+ }
+
+ private val viewModel2 by lazy {
+ ViewModelProvider(this, viewModelFactory) [ExampleViewModel2::class.java]
+ }
private val component by lazy {
(application as ExampleApp).component
@@ -20,6 +29,6 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel.method()
-
+ viewModel2.method()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
new file mode 100644
index 0000000..12d57a3
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
@@ -0,0 +1,13 @@
+package com.example.dependencyinjectionstart.example2.presentation
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import javax.inject.Inject
+
+class ViewModelFactory @Inject constructor(
+ private val viewModels: @JvmSuppressWildcards Map
+): ViewModelProvider.Factory {
+ override fun create(modelClass: Class): T {
+ return viewModels[modelClass.simpleName] as T
+ }
+}
\ No newline at end of file
From 918feea9efebbbd6a64b3d84cc7c1ad5759aba89 Mon Sep 17 00:00:00 2001
From: Cavc13 <13liver@mail.ru>
Date: Fri, 4 Mar 2022 13:24:38 +0300
Subject: [PATCH 13/13] Used inject.Provider
---
app/src/main/AndroidManifest.xml | 1 +
.../example2/di/ApplicationComponent.kt | 3 ++
.../example2/presentation/MainActivity.kt | 7 ++++
.../example2/presentation/MainActivity2.kt | 34 +++++++++++++++++++
.../example2/presentation/ViewModelFactory.kt | 7 ++--
app/src/main/res/layout/activity_main.xml | 1 +
6 files changed, 51 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity2.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d5d4f63..49ab16f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,6 +19,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
index 1822021..5474a5b 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/di/ApplicationComponent.kt
@@ -5,6 +5,7 @@ import com.example.dependencyinjectionstart.example2.data.database.ExampleDataba
import com.example.dependencyinjectionstart.example2.data.network.ExampleApiService
import com.example.dependencyinjectionstart.example2.presentation.ExampleViewModel
import com.example.dependencyinjectionstart.example2.presentation.MainActivity
+import com.example.dependencyinjectionstart.example2.presentation.MainActivity2
import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
@@ -15,6 +16,8 @@ interface ApplicationComponent {
fun inject(activity: MainActivity)
+ fun inject(activity: MainActivity2)
+
// @Component.Builder
// interface ApplicationComponentBuilder {
//
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 152d04b..493a66d 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
@@ -1,7 +1,9 @@
package com.example.dependencyinjectionstart.example2.presentation
+import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import com.example.dependencyinjectionstart.R
import com.example.dependencyinjectionstart.example2.ExampleApp
@@ -30,5 +32,10 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
viewModel.method()
viewModel2.method()
+ findViewById(R.id.tv_hello_world).setOnClickListener {
+ Intent(this, MainActivity2::class.java).apply {
+ startActivity(this)
+ }
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity2.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity2.kt
new file mode 100644
index 0000000..3fc3cd8
--- /dev/null
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/MainActivity2.kt
@@ -0,0 +1,34 @@
+package com.example.dependencyinjectionstart.example2.presentation
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.example.dependencyinjectionstart.R
+import com.example.dependencyinjectionstart.example2.ExampleApp
+import javax.inject.Inject
+
+class MainActivity2 : AppCompatActivity() {
+
+ @Inject
+ lateinit var viewModelFactory: ViewModelFactory
+
+ private val viewModel by lazy {
+ ViewModelProvider(this, viewModelFactory) [ExampleViewModel::class.java]
+ }
+
+ private val viewModel2 by lazy {
+ ViewModelProvider(this, viewModelFactory) [ExampleViewModel2::class.java]
+ }
+
+ private val component by lazy {
+ (application as ExampleApp).component
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ component.inject(this)
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ viewModel.method()
+ viewModel2.method()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
index 12d57a3..c11a347 100644
--- a/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
+++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/presentation/ViewModelFactory.kt
@@ -2,12 +2,15 @@ package com.example.dependencyinjectionstart.example2.presentation
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.example.dependencyinjectionstart.example2.di.ApplicationScope
import javax.inject.Inject
+import javax.inject.Provider
+@ApplicationScope
class ViewModelFactory @Inject constructor(
- private val viewModels: @JvmSuppressWildcards Map
+ private val viewModelProviders: @JvmSuppressWildcards Map>
): ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
- return viewModels[modelClass.simpleName] as T
+ return viewModelProviders[modelClass.simpleName]?.get() as T
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 881bf8f..d05e417 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,6 +7,7 @@
tools:context=".example2.presentation.MainActivity">