我dagger
在 android 应用程序中使用 DI。我可以为模块之外的其他类提供变量,但如何更新它们?
示例:登录
我需要一个可以提供 User的 AuthenticationModule 。应用启动时,用户未登录,因此为空。但是在认证成功后,LoginActivity 需要设置 User 的值,使其可以通过 AuthenticationModule 被应用的其他部分访问。
简单地设置注入字段的值并不能为我完成这项工作。
甚至可能吗?
我dagger
在 android 应用程序中使用 DI。我可以为模块之外的其他类提供变量,但如何更新它们?
示例:登录
我需要一个可以提供 User的 AuthenticationModule 。应用启动时,用户未登录,因此为空。但是在认证成功后,LoginActivity 需要设置 User 的值,使其可以通过 AuthenticationModule 被应用的其他部分访问。
简单地设置注入字段的值并不能为我完成这项工作。
甚至可能吗?
我有类似的问题,我做了这样的事情:
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(将登录的用户传递给构造函数)并重新创建整个图。
这只是想法,我从来没有这样做过。
通过一遍又一遍地重新分配用户对象本身,ObjectGraph无法将新分配的对象传递给其他类。
我通过实现一个AuthenticationHandler
保存用户对象的方法解决了这个问题。所以只有一个被注入的对象实现了类似的方法setCurrentUser()