我在应用程序中有多个匕首瞄准镜
我试图在UserScope
下更新用户对象,但不知何故,对象更新没有反映在它的依赖组件上。因此,一旦更新屏幕更新了用户对象,backstack中的活动就会收到更新事件
>
用户登录并打开主屏幕。此时,我的用户管理器已经使用从API调用获得的用户对象创建了用户组件。
主屏幕打开更新屏幕,通过在UserManager
内部重新创建新的userComponent
来更新用户。这还会触发一个事件,告知主屏幕获取更新的用户对象。
主屏幕接收事件。然而,HomeViewModel(背面的屏幕)仍然是指dagger注入的旧用户
对象。
这是因为HomeComponent
是独立组件吗?所以,它保留了一个旧的参考
有没有办法实现此更新?
- 最好不使用
子组件
。因为我使用的是一个多模块(动态功能)设置,如果我把它作为一个单独的组件来处理,它会帮助我
@Singleton
@Component
interface CoreComponent {
val userBuilder: UserComponent.Builder
val userManager: UserManager
fun providerContext(): Context
fun inject(activity: UserActivity)
@Component.Factory
interface Factory {
fun create(
@BindsInstance applicationContext: Context
): CoreComponent
}
}
@UserScope
@Subcomponent
interface UserComponent {
val userManager: UserManager
@UserScope
val user: User
@Subcomponent.Builder
interface Builder {
fun bindUser(@BindsInstance user: User): Builder
fun build(): UserComponent
}
}
@Singleton
class UserManager @Inject constructor(private val userBuilder: UserComponent.Builder) {
var userComponent: UserComponent? = null
private set
init {
// creating as a dummy reference
createUser(User("1", "1"))
}
fun createUser(user: User) {
userComponent = null
userComponent = userBuilder.bindUser(user).build()
}
fun logout() {
userComponent = null
}
}
@Component(
modules = [HomeModule::class],
dependencies = [UserComponent::class]
)
@ActivityScope
interface HomeComponent {
fun inject(activity: HomeActivity)
@Component.Factory
interface Factory {
fun create(
@BindsInstance applicationContext: HomeActivity,
coreComponent: UserComponent,
): HomeComponent
}
}
@Module
class HomeModule {
@ActivityScope
@Provides
fun provideVM(activity: HomeActivity, user: User): HomeViewModel {
val vm by activity.scopedComponent {
HomeViewModel(user)
}
return vm
}
}
如果您有组件A-
在本例中,您还需要重新创建
C
(这次使用B*
),以获得C*
(使用新的依赖项)。现在您有了新的组件A-
e、 g.在一个允许在用户之间切换的应用程序中,我的主要活动是“Singleton”-
我不太清楚如何用匕首2解决这个问题。假设我们有为我们提供,那么我们有只使用这一个模块。在此基础上,我们有和,它们依赖于<代码>活动组件的构建与 然后我注入我的活动: 现在我可以使用中声明的所有内容,但是我无法访问。 所以问题是如何实现这一目标?所以,当我构建依赖于另一个组件的组件时,我仍然可以从第一个组件访问模块? 我想我已经找到了解决方案,在重新观看了Jake的Devxx演讲之后,我不得不错过了
我对匕首2还不太熟悉。我正试图在我的Android项目中实现它。我有一个需要。我用匕首把它注射到这个服务中。 、和具有标记为的方法当我构建项目时,我收到以下错误: locationServiceComponent依赖于多个作用域组件:@Singleton NetComponent@Singleton RepositoryComponent 我知道我的不能依赖于两个作用域组件,但我的服务中需要这两个
Dagger 2即将面世,但可用的示例甚至无法立即编译,文档是Dagger 1的复制粘贴替换。 有没有人有一个在谷歌的Dagger 2上运行的正确应用程序的例子?
问题内容: 我可能错过了一些东西,但我认为像@Singleton这样的作用域用于定义“作用域生命周期”。 我在Android应用程序中使用了Dagger 2(但我认为问题根本与android相关)。 我有1个模块: 我有两个与范围不同的组件: 两者,并且,有一个构造函数。虽然MenuPresenter期望将其作为参数,但LoginPresenter却采用了: 但是每次我使用这些组件创建一个或时,都
我在android项目中使用Dagger2我有两个作用域:ActivityScope和FragmentScope我读了一些示例代码,他们说定义并使用ActivityScope,所以对象将在activity lifecycle中销毁。因为活动和片段有不同的生命周期,所以我们应该有两个作用域。 我的问题是:我是否需要做一些事情让代码知道,当我使用ActivityScope时,对象应该随活动生命周期一起
基于本教程使用Dagger Hilt添加子组件需要 这就是如何创建子组件 我的问题是如何实现 因为它没有显示它是如何提供给UserManager类的 我正在尝试创建一个AppComponent来测试子组件如何与Dagger Hilt一起工作 并在应用中 我应该如何在中创建构建器,创建实现Provider的匿名类不正确吗?