sok*_*sok 0 android dependency-injection kotlin dagger-hilt
请考虑以下类:
class MainRepository constructor(
private val blogDao: BlogDao,
private val blogRetrofit: BlogRetrofit,
private val cacheMapper: CacheMapper,
private val networkMapper: NetworkMapper
){
.....
}
Run Code Online (Sandbox Code Playgroud)
如果我想将 MainRepository 类转换为使用 dagger-hilt 来传递参数,那么在构造函数之前添加 @Inject 就足够了吗?
class MainRepository @Inject constructor(
private val blogDao: BlogDao,
private val blogRetrofit: BlogRetrofit,
private val cacheMapper: CacheMapper,
private val networkMapper: NetworkMapper
){
Run Code Online (Sandbox Code Playgroud)
还是需要更多??
是的,这就够了。但是,如果你想使你的生活更简单的测试,可以考虑加入Interface到MainRepository这样的:
interface MainRepository {
// your functions
}
Run Code Online (Sandbox Code Playgroud)
然后是实施
@Singleton
class MainRepositoryImpl @Inject constructor(
// your dependencies
) : MainRepository
Run Code Online (Sandbox Code Playgroud)
最后,在你的 Di.Modules 中
@Module
@InstallIn(ApplicationComponent::class) // or whatever graph fits your need the best
interface RepositoryModules {
@Binds
fun provideMainRepositoryImpl(repository: MainRepositoryImpl): MainRepository
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像下面这样使用你的存储库
class ExampleRepositoryUsageClass @Inject constructor(
private val mainrepository: MainRepository // MainRepositoryImpl is injected here
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |