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 1/4] 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 2/4] 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 3/4] 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 4/4] 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