如何为模块提供动态令牌?

时间:2018-08-30 15:47:07

标签: kotlin dagger-2

我正想把头缠在Dagger2上。我无法理解如何为整个应用程序共享的依赖项提供参数。这是我想到的(这些只是我正在使用的虚拟类,因此我可以理解这些概念):

{
    "configurations": [
        {
            "name": "Win32",
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                **REDACTED**
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\AndroidTools\\android-ndk-r13b\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang.exe",
            "intelliSenseMode": "clang-x64",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

这是东西:

我希望class Token(val token: String) class File @Inject constructor(@param:Named("token") val token: Token) @Component(modules = arrayOf(SessionModule::class)) interface SessionManager { fun file(): File } @Module class SessionModule { @Provides @Singleton fun provideToken(token: String) = Token(token) } 是一个单例,以便始终为请求会话的人提供相同的令牌。但我也希望能够根据需要更新令牌。我该怎么做?我曾考虑过创建一个将变量保存在provideToken类中的静态变量,但是我认为这可以快速实现意大利面条式代码。

1 个答案:

答案 0 :(得分:0)

恕我直言,你不应该这样做,不要注入动态的东西。 StringList<String>之类的东西不应被匕首注入。匕首用于注入静态和协作素材。

您可以将令牌存储在内存中,也可以SharePreference以外的任何形式通过匕首保存。