Android Dagger singleton用户模式:最佳实践
我是Dagger的初学者,正在寻找处理单例用户对象的最佳方法 包含用户令牌的 我有几个Manager类,其中注入了用户(见下文)。但是,我担心的是,在应用程序生命周期中,用户的价值可能会发生变化:当登录、注销或其他操作时,CredentialManager可以执行类似于Android Dagger singleton用户模式:最佳实践,android,dagger,Android,Dagger,我是Dagger的初学者,正在寻找处理单例用户对象的最佳方法 包含用户令牌的 我有几个Manager类,其中注入了用户(见下文)。但是,我担心的是,在应用程序生命周期中,用户的价值可能会发生变化:当登录、注销或其他操作时,CredentialManager可以执行类似于this.User=new User(jsonResponse)的指令,这些指令会在CredentialManager中更改用户对象,但不会在UploaderManager中更改用户对象(因为用户注入的引用已被新用户覆盖)。我创建
this.User=new User(jsonResponse)
的指令,这些指令会在CredentialManager中更改用户对象,但不会在UploaderManager中更改用户对象(因为用户注入的引用已被新用户覆盖)。我创建了一个复制方法来避免这种情况:this.User.copy(new User(jsonResponse))
,但我发现它不干净,很难维护
您建议如何处理这个问题?在我使用Dagger之前,我使用了一个类似于User.getInstance()
的单例模式,这很好,但为了测试目的,我尝试改进我的代码。谢谢
@Singleton
public class CredentialManager {
private User user;
@Inject
public CredentialManager(User user) {
this.user = user;
}
}
您可以使用新的用户实例更新用户对象,复制用户对象不适合您的情况。而且使用此解决方案,您仍然可以从json解析用户对象并更新现有的单例对象
@Singleton
public class User {
private String userId;
@Inject
public User() {
}
public void update(User user){
this.userId = user.userId;
}
}
@Singleton
public class User {
private String id;
@Inject
public User() {
/// ...
}
}
@Singleton
public class User {
private String userId;
@Inject
public User() {
}
public void update(User user){
this.userId = user.userId;
}
}