【问题标题】:Hilt in non-android module clean architecture setup非 android 模块清理架构设置中的 Hilt
【发布时间】:2021-08-24 09:51:55
【问题描述】:

我有一个由数据、域和演示模块组成的多模块化安卓应用程序设置。 Domain 模块是 java-only。我知道可以通过添加来支持非android模块中的hilt:

域名build.gradle

implementation "com.google.dagger:hilt-core:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"

域模块提供了 UseCase 类的实现,这些类应该被注入到存在于 Presentation (app) 模块中的 ViewModel 中。

域模块:

@Module
@InstallIn(SingletonComponent::class)
//   @InstallIn(ViewModelComponent::class)
object UseCaseModule {

    @Provides
    //    @ViewModelScoped
    fun provideGetMovieDetailsUseCase(
        movieRepository: MovieRepository
    ): GetMovieDetailsUseCase {
        return GetMovieDetailsUseCaseImpl(movieRepository)
    }
}

演示模块:

@HiltViewModel
class MovieDetailViewModel @Inject constructor(
    private val getMovieDetailsUseCase: GetMovieDetailsUseCase
) : ViewModel() {
    ...
}

由于java-only模块的性质,我不能使用@InstallIn(ViewModelComponent::class)注解。相反,我必须在SingletonComponent::class 中安装依赖项。这也是在 awnser here

中完成的

我的问题

这种方法是“最佳实践”吗?还是将库设为 Android 库以便我可以将依赖关系限定为 ViewModel 是否更好?我宁愿把它保留为一个仅限 java 的库。

【问题讨论】:

  • @ADM 该评论具有误导性。该模块被标记为 SingletonComponent 而不是它提供的类型。

标签: java android kotlin dagger-hilt android-module


【解决方案1】:

我知道的一种常见做法是将所有模块的依赖项配置移动到app 模块(因为Hilt 的使用是在框架级别)。然后,您可以使用 java 注入库在纯 java 库(例如域层)中注入依赖项。

所以在您的 app build.gradle 文件中,您将拥有:

// hilt dependency
implementation "com.google.dagger:hilt-android:2.28-alpha"
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"

在您的 domain build.gradle 文件中,您将拥有:

implementation "javax.inject:javax.inject:$javaInjectVersion"

总而言之,您“连接”域模块依赖项的文件应该移动到app 模块。

Here's a project 证明了这个想法。

【讨论】:

  • 啊,是的,谢谢,我所要做的就是将 UseCaseModule 移动到我的表示层。 :)
【解决方案2】:

这是我对干净架构和刀柄的打击

  • data 是一个带有数据源接口、存储库接口和模型的纯 java 模块
  • domain 是一个带有用例接口和实体的纯 java 模块
  • framework 是一个 android 模块,可以在其中找到数据源、存储库和用例的实际实现。这是声明 Hilt 模块的同一模块
  • app 是应用模块,以域和框架为依赖项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多