用户模式的 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;
}
}
我是 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;
}
}