Как мне предоставить динамический токен модулю? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь обернуть голову вокруг 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 Ответ

0 голосов
/ 30 августа 2018

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

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

...