【问题标题】:Using dagger-hilt in repository class在存储库类中使用 dagger-hilt
【发布时间】:2020-11-13 11:51:05
【问题描述】:

请考虑以下课程:

class MainRepository constructor(
    private val blogDao: BlogDao,
    private val blogRetrofit: BlogRetrofit,
    private val cacheMapper: CacheMapper,
    private val networkMapper: NetworkMapper
){
    .....
}

如果我想将 MainRepository 类转换为使用 dagger-hilt 传递参数,像这样在构造函数之前添加 @Inject 就足够了吗??

class MainRepository @Inject constructor(
    private val blogDao: BlogDao,
    private val blogRetrofit: BlogRetrofit,
    private val cacheMapper: CacheMapper,
    private val networkMapper: NetworkMapper
){

还是需要更多??

【问题讨论】:

    标签: android kotlin dependency-injection dagger-hilt


    【解决方案1】:

    是的,这就够了。但是,如果您想让您的测试更轻松,请考虑将Interface 添加到MainRepository,如下所示:

    interface MainRepository {
       // your functions
    }
    

    然后是实现

    @Singleton
    class MainRepositoryImpl @Inject constructor(
         // your dependencies
    ) : MainRepository
    

    最后,在您的 Di.Modules 中

    @Module
    @InstallIn(ApplicationComponent::class) // or whatever graph fits your need the best
    interface RepositoryModules {
        @Binds
        fun provideMainRepositoryImpl(repository: MainRepositoryImpl): MainRepository
    }
    

    然后您可以像下面这样使用您的存储库

    class ExampleRepositoryUsageClass @Inject constructor(
         private val mainrepository: MainRepository // MainRepositoryImpl is injected here
    )
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2021-08-25
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多