Koin - Как создать синглтон?

У меня есть класс InteractorCache<T>, который я хотел бы внедрить в разные места с помощью Koin.

Я хотел бы создать одноэлементный экземпляр этого класса на основе типа T. Итак, если у меня есть 10 типов T, я бы хотел 10 разных синглтонов.

Пока мне удалось сделать это с помощью следующего кода (это пример только с двумя типами, A и B):

val interactorAModule = module {
    factory {
        InteractorA(get())
    }
}

val aCache = module {
    single(named("A")){
        InteractorCache<List<A>>()
    }
}

val interactorBModule = module {
    factory {
        InteractorB(get())
    }
}

val bCache = module {
    single(named("B")){
        InteractorCache<List<B>>()
    }
}

Это работает, но есть много повторений, поскольку мне приходится создавать новый модуль кеширования (aCache, bCache) каждый раз, когда я создаю новый тип. Вместо этого я хотел бы сделать что-то вроде этого:

val cacheModule = module{
     single<T>{
         InteractorCache<T>()
    }
}

так что есть только 1 объявление, которое работает для любого типа T.

Есть ли способ сделать это в Koin?


person Bitcoin Cash - ADA enthusiast    schedule 25.11.2019    source источник


Ответы (1)


Хотя это поздно, но идея сделать общий или T синглтон - плохая идея, когда вы объявляете синглтон класса, он будет запускать единственный экземпляр, поэтому ошибка времени выполнения будет несовместима или несовместима с InteractorCache () в качестве первого класс, который вы назвали бы T, например класс A InteractorCache (), он будет фиксированным экземпляром A и больше не может быть назначен классу B.

person jake    schedule 18.09.2020