使用 Dagger 注入登录会话

MrH*_*rio 3 java android dependency-injection dagger

我正在调整我的项目以使用 DI - 特别是 Dagger。我在注入类时没有问题,但是如何“注入”运行时生成的变量?

说,我想存储用户的登录会话对象,其中包含诸如api-token、之类的数据loggedUsername。当用户成功登录时,这个对象在运行时生成,在另一个负责这样做的类中。

作为一个例子,我想要的是简单地做这样的事情:

public class FooPresenter {
    ...

    Session mSession;

    @Inject FooPresenter(Session session, ...) {
        mSession = session;
        ...
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

MrH*_*rio 5

我最终在 Dagger 模块类中声明了一个方法来获取我的会话,StringSharedPreferences成功登录后我将其保留为输入。

这样,我就可以在任何需要的地方注入会话。

这是我的SessionDomainModule

@Module(
        library = true,
        complete = false)
public class SessionDomainModule {

    // TODO: Rethink this implementation.
    @Provides
    public Session provideSession(Application application) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(application);
        String sessionJString = preferences.getString(AppConfig.PREF_KEY_CURRENT_SESSION, "");

        Session session;
        if(!"".equals(sessionJString)) {
            return new Gson().fromJson(sessionJString, Session.class);
        }

        return null;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,我可以实现我想要的东西,并且我的问题中的类似代码最终可以工作。