gpt4 book ai didi

Android Dagger 更新模块外的值

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:07 24 4
gpt4 key购买 nike

我在 Android 应用程序中使用 dagger 作为 DI。我可以为模块外的其他类提供变量,但如何更新它们?

Example: Login

I need a AuthenticationModule which can Provide a User. When the app starts, the User is not logged in, so it is null.But after successful authentication, LoginActivity needs to set thevalue of the User to make it accessible through other parts of the appvia AuthenticationModule.

简单地设置注入(inject)字段的值并不适合我。

有可能吗?

最佳答案

我有类似的问题,我做了这样的事情:

包装器:

class LoggedUserProvider {
private User user;
User getLoggedUser() {
return user;
}
void setLoggedUser(User user) {
this.user = user;
}
}

模块:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
@Provides
@Singleton
LoggedUserProvider provideLoggedUserProvider() {
return new LoggedUserProvider();
}
}

之后,您可以使用 @Inject LoggedUserProvider 并仅使用 getter/setter 来设置当前登录的用户。

如果你想在没有包装器的情况下制作这个,我想你需要制作这个模块:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
@Provides
User provideUser() {
return null;
}
}

还有这个但是在授权之前不要包含这个:

@Module(overrides = true)
public class CurrentUserModule {
User currentUser;
public CurrentUserModule(User currentUser) {
this.currentUser = currentUser;
}

@Provides
@Singleton
User provideUser() {
return currentUser;
}
}

然后,在授权后将此模块添加到 objectGraph(将登录的用户传递给构造函数)并重新创建整个图。
这只是想法,我从来没有这样做过。

关于Android Dagger 更新模块外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25621067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com