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' 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..6ba6934 100644 --- a/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/Activity.kt @@ -1,14 +1,13 @@ package com.example.dependencyinjectionstart.example1 +import javax.inject.Inject + 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 + @Inject + lateinit var computer: Computer + + init { + 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 new file mode 100644 index 0000000..e8c52f2 --- /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.keyboard = Keyboard() + } +} 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/NewComponent.kt b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt new file mode 100644 index 0000000..714d064 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example1/NewComponent.kt @@ -0,0 +1,9 @@ +package com.example.dependencyinjectionstart.example1 + +import dagger.Component + +@Component(modules = [ComputerModule::class]) +interface NewComponent { + + fun inject(activity: Activity) +} 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..581db63 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/database/ExampleDatabase.kt @@ -0,0 +1,16 @@ +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..76cb8fd --- /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..ff8e588 --- /dev/null +++ b/app/src/main/java/com/example/dependencyinjectionstart/example2/data/network/ExampleApiService.kt @@ -0,0 +1,16 @@ +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/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 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 84775ec..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 @@ -3,10 +3,22 @@ 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.DaggerNewComponent +import com.example.dependencyinjectionstart.example2.di.DaggerAppComponent +import javax.inject.Inject class MainActivity : AppCompatActivity() { + + @Inject lateinit var viewModel: ExampleViewModel + + init { + DaggerAppComponent.create().inject(this) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + viewModel.method() } } \ No newline at end of file