java - 非 android 模块清理架构设置中的 Hilt

标签 java android kotlin dagger-hilt android-module

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

implementation "com.google.dagger:hilt-core:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"
域模块提供了 UseCase 类的实现,这些类应该被注入(inject)到存在于 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 的库。

最佳答案

我知道的一个常见做法是将所有模块的依赖配置移动到 app模块(因为 Hilt 的使用是在框架级别)。然后,您可以使用 java 注入(inject)库在纯 Java 库(例如域层)中注入(inject)依赖项。
所以在你的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这证明了这个想法。

关于java - 非 android 模块清理架构设置中的 Hilt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67869472/

相关文章:

kotlin - 如何将@Cacheable 与 Kotlin 挂起功能一起使用

java - 调试问题关闭 Apache Tomcat

Java 5 SwingWorker 替换

android - 最后一次了解 Android 中的上下文

interface - 初始化接口(interface)实例变量

kotlin - Kotlin arrow.kt-Option.getOrElse接受T以外的其他类型

java - 使用 Arrays.asList() 时如何在 List 中添加元素

java - 用于 Java 的异步 HTTP 客户端

android - Espresso - 如何在回收站 View 中查找特定项目(顺序是随机的)

android - 在 kotlin 的 Elvis 运算符中使用多行