用户模式的 Dagger 单例:最佳实践

Dagger singleton for User pattern : best practive

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

我有几个管理器 class 用户被注入(见下文)。但是,我担心的是 User 的值在应用程序生命周期中可能会发生变化的方式:在登录、注销或其他操作时,CredentialManager 可以执行 this.user = new User(jsonResponse) 之类的指令,这会更改 CredentialManager 中的用户对象,但不会更改 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;
}
}

@Singleton
public class UploaderManager {

private User user;

@Inject
public UploaderManager(User user) {
    this.user = user;
}
}

@Singleton
public class User {
  private String id;

@Inject
public User() {
 /// ...
}
}

您可以使用新的用户实例更新用户对象,复制用户对象不适合您的情况。而且使用此解决方案,您仍然可以从 json 解析用户对象并更新现有的单例对象。

@Singleton
public class User {

    private String userId;

    @Inject
    public User() {
    }

    public void update(User user){
        this.userId = user.userId;
    }
}