Как я могу предоставить динамический маркер модулю?
Я пытаюсь обернуть голову вокруг 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 ответ:
ИМХО, вы не должны этого делать, не вводите динамические вещества. Что-то вроде
String
,List<String>
не предполагается, что они будут впрыскиваться кинжалом. Кинжал используется для инъекцийстатического и кооперативного вещества.Вы можете сохранить свой жетон в памяти или
SharePreference
что угодно, но через Кинжал.