安卓匕首更新模块外的值



我在android应用程序中使用dagger进行DI。我可以向模块之外的其他类提供变量,但如何更新它们

示例:登录

我需要一个能够提供用户的AuthenticationModule。当应用程序启动时,用户未登录,因此为null。但在成功验证后,LoginActivity需要设置用户的值,使其可以通过应用程序的其他部分访问通过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中(将记录的用户传递给构造函数),并重新创建整个图
这只是个主意,我从来没有这样做过。

通过一次又一次地重新分配User对象本身,ObjectGraph无法将新分配的对象传递给其他类。

我通过实现一个保存用户对象的AuthenticationHandler解决了这个问题。因此,只有一个Object被注入,它实现了setCurrentUser() 等方法

最新更新