基于本教程使用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()
我的问题是如何实现提供程序
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的匿名类不正确吗?
我的问题是如何实现Provider
您不必自己实现提供程序
- Dagger 知道如何自动创建任何绑定的提供程序。因此,在您的情况下,您应该将提供程序注入到您的应用程序中:
kotlin prettyprint-override">@HiltAndroidApp
class MyApplication: Application() {
@Inject lateinit var provider: Provider<MySubcomponent.Builder>
val mySubcomponent by lazy {
provider.get()....build()
}
}
我正在尝试为我的navControl ler提供匕首柄。但是我使用的方法不起作用。我想提供navControl ler以便通过构造函数注入将其注入我的片段中。 我还创建了FragmentWorks类,以便通过构造函数注入我的依赖项。我知道是这里的问题,但我不知道正确的解决方案… 感谢您的帮助,谢谢! 原因:java.lang.ClassCastException:com.example.app。应
我正在尝试通过修改MVP应用程序Belajar应用程序在MVVM架构中应用DaggerApplicationComponent,但是我刚刚收到未解决的引用:DaggerApplicationComponent的错误。Kotlin kapt 已被应用,我尝试重建项目,但我从应用程序组件收到错误:C:\Users\3\AndroidStudioProjects\belajar3 - Copy (3)\
我在应用程序中有多个匕首瞄准镜 UserScope-范围表示用户会话 ActivityScope-每个活动的范围 UserComponent-CoreComponent的子组件 UserManager-创建UserComponent的单例程序 HomeComponent-依赖于UserComponent的组件 我试图在下更新用户对象,但不知何故,对象更新没有反映在它的依赖组件上。因此,一旦更新屏幕
我是Android开发新手,需要为大学建立我的第一个项目。大学用的是旧版本的XML和Java,但是我想学Compose,所以我学了Kotlin。 现在,在设置好一切之后,我试图使用hiltViewModel()方法将视图模型注入到可组合函数中,但我得到了一个错误。我看了这个教程:https://www.youtube.com/watch?v=A7CGcFjQQtQ 在让这个工作之后。现在它说找不到
我使用Dagger-Hilt进行依赖注入,但是我不知道如何在抽象类中进行字段注入。 [DI包] 我使用匕首剑柄(AppModule.kt)将“ErrorHandler”作为单例提供 扩展到BaseUseCase以上的用例都是为匕首剑柄(UseCaseModule.kt)编写的。 > 我尝试使用匕首柄(如BaseUseCaseModule.kt)提供或绑定BaseUseCase类,但是由于它具有类型
这很好,但是如果我使用全局组件甚至子组件中的一个模块,那么应该传入上下文。因此,这意味着如果我用匕首注入演示器,它将被绑定到ApplicationContext。这使得作为JUnit进行测试变得困难。Android代码不应该在演示器中。 所以我想问的是,最好的做法是只在活动、片段、广播接收器和服务中使用匕首吗?就mvp架构而言,这就是。另一个解决方案是设计另一个dagger组件,但不是与appco