【发布时间】:2020-07-27 13:13:49
【问题描述】:
基于this tutorial添加子组件使用Dagger Hilt需要
@Singleton
class UserManager @Inject constructor(
// Since UserManager will be in charge of managing the UserComponent's
// lifecycle, it needs to know how to create instances of it. We use the
// provider (i.e. factory) Dagger generates for us to create instances of UserComponent.
private val userComponentProvider: Provider<UserComponent.Builder>
) {
/**
* UserComponent is specific to a logged in user. Holds an instance of
* UserComponent. This determines if the user is logged in or not, when the
* user logs in, a new Component will be created.
* When the user logs out, this will be null.
*/
var userComponent: UserComponent? = null
private set
...
private fun userLoggedIn(userId: String) {
// When the user logs in, we create a new instance of UserComponent
val user = createUser(userId)
userComponent = userComponentProvider.get().setUser(user).build()
}
private fun logout() {
// When the user logs out, we remove the instance of UserComponent from memory
userComponent = null
}
}
这是您创建子组件的方式userComponent = userComponentProvider.get().setUser(user).build()
我的问题是如何实现Provider
private val userComponentProvider: Provider<UserComponent.Builder>
因为它没有显示它是如何提供给 UserManager 类的
我正在尝试创建一个 AppComponent 来测试子组件如何与 Dagger Hilt 一起工作
@DefineComponent(parent = ApplicationComponent::class)
interface AppComponent {
@DefineComponent.Builder
interface Builder {
fun application(@BindsInstance application: Application): Builder
fun build(): AppComponent
}
}
在应用中
@HiltAndroidApp
class MyApplication : Application() {
private val appComponentProvider by lazy {
object : Provider<AppComponent.Builder> {
override fun get(): AppComponent.Builder {
??????
}
}
}
val appComponent by lazy {
appComponentProvider.get().application(this).build()
}
}
我应该如何在get() 中创建构建器,创建实现Provider 的匿名类不正确吗?
【问题讨论】:
标签: android dagger-2 dagger-hilt