Android Dagger singleton用户模式:最佳实践

Android Dagger singleton用户模式:最佳实践,android,dagger,Android,Dagger,我是Dagger的初学者,正在寻找处理单例用户对象的最佳方法 包含用户令牌的 我有几个Manager类,其中注入了用户(见下文)。但是,我担心的是,在应用程序生命周期中,用户的价值可能会发生变化:当登录、注销或其他操作时,CredentialManager可以执行类似于this.User=new User(jsonResponse)的指令,这些指令会在CredentialManager中更改用户对象,但不会在UploaderManager中更改用户对象(因为用户注入的引用已被新用户覆盖)。我创建

我是Dagger的初学者,正在寻找处理单例用户对象的最佳方法 包含用户令牌的

我有几个Manager类,其中注入了用户(见下文)。但是,我担心的是,在应用程序生命周期中,用户的价值可能会发生变化:当登录、注销或其他操作时,CredentialManager可以执行类似于
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;
    }
}