Как я могу предоставить динамический маркер модулю?


Я пытаюсь обернуть голову вокруг Dagger2. У меня возникли проблемы с пониманием того, как я могу предоставить параметр для зависимости, которая является общей для всего приложения. Вот что я придумал (это просто фиктивные классы, которые я использую, чтобы понять концепции):

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 был синглтоном, так что один и тот же маркер всегда предоставляется людям, запрашивающим сеанс. Но я также хочу иметь возможность обновить маркер, если это необходимо. Как стал бы я это делать? Я думал о создании статической переменной, которая содержит маркер внутри класса SessionModule, но я думаю, что это может привести к спагетти-коду очень быстро.

1 2

1 ответ:

ИМХО, вы не должны этого делать, не вводите динамические вещества. Что-то вроде String, List<String> не предполагается, что они будут впрыскиваться кинжалом. Кинжал используется для инъекцийстатического и кооперативного вещества.

Вы можете сохранить свой жетон в памяти или SharePreference что угодно, но через Кинжал.