Chr*_*rry 7 android dependency-injection solid-principles clean-architecture dagger-hilt
我正在按照 Clean Architecture 原则构建一个 Android 应用程序。这是我所拥有的:
应用模块:
用例模块:
存储库模块:
数据模块:
我正在尝试在应用程序中使用 Hilt 进行依赖注入。我不想将 Retrofit、OkHttp 等暴露给 app 模块,因为我不希望开发人员能够将网络代码放在错误的模块中。请记住,应用程序模块使用只能与用例对话的 ViewModel。
我该如何设置?我尝试将 dagger 模块放在每个模块中来定义注入,然后在主应用程序模块中我包含了用例中的模块:
@Module(includes = [UseCaseModule::class])
@InstallIn(ApplicationComponent::class)
object AppModule
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它开始抱怨无法在我想隐藏的其他模块中找到传递依赖项。
我对多模块采用了相同的方法,但比你的方法更广泛,并且它有效(应用程序、核心、导航、api、数据、域、演示、coreAndroidTest)。
对于AppModule,您不需要指定包含UseCaseModule,只需确保添加 @InstallIn ApplicationComponent :
@Module
@InstallIn(ApplicationComponent::class)
class AppModule {
@Provides
fun provideContext(app: Application): Context = app.applicationContext
@Provides
fun provideResources(app: Application): Resources = app.resources
}
Run Code Online (Sandbox Code Playgroud)
当您在不同的模块中定义UseCaseModule时,方法相同:
@Module
@InstallIn(ApplicationComponent::class)
class DomainModule {
// Your @Provides
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |