Android Dagger更新模块外的值

Mar*_*hin 12 android dependency-injection object-graph dagger

dagger在Android应用程序中使用DI.我可以为模块外的其他类提供变量,但是如何更新它们呢?

示例:登录

我需要一个可以提供用户的AuthenticationModule .当应用程序启动时,用户未登录,因此它为null.但在成功进行身份验证后,LoginActivity需要设置User的值,以便通过AuthenticationModule通过应用程序的其他部分访问它.

简单地设置注入场的值对我来说不起作用.

它甚至可能吗?

Woj*_*hKo 14

我有simillar问题,我做了这样的事情:

包装:

class LoggedUserProvider {
    private User user;
    User getLoggedUser() {
        return user;
    }
    void setLoggedUser(User user) {
        this.user = user;
    }
}
Run Code Online (Sandbox Code Playgroud)

模块:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    @Singleton
    LoggedUserProvider provideLoggedUserProvider() {
        return new LoggedUserProvider();
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用@Inject LoggedUserProvider并使用getter/setter来设置当前登录的用户.

要么

如果你想在没有包装的情况下制作它,我猜你需要制作这个模块:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    User provideUser() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个但是在授权之前不包括这个:

@Module(overrides = true)
public class CurrentUserModule {
    User currentUser;
    public CurrentUserModule(User currentUser) {
        this.currentUser = currentUser;
    }

    @Provides
    @Singleton
    User provideUser() {
        return currentUser;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在授权之后将此模块添加到objectGraph(将记录的用户传递给构造函数)并重新创建整个图形.
这只是想法,我从来没有这样做过.