#kotlin #toothpick-di
Вопрос:
У меня есть приложение не для Android, в котором много похожих объектов осколков, и я хочу, чтобы все объекты внутри каждого осколка (клиент БД, DAOs…) были одиночными.
Для этой цели я создал аннотацию ShardSingleton:
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ShardSingleton
и я создаю каждый объект-осколок в его собственной области:
var shard1: Shard = KTP.openScopes("app", "shard1")
.supportScopeAnnotation(ShardSingleton::class.java)
.getInstance(Shard::class.java)
Чтобы мой DAO действительно был одиночным элементом внутри своего осколка, я должен аннотировать его обоими @ShardSingleton
и @Singleton
:
@Singleton // the FooDAO is not a singleton without this annotation
@ShardSingleton
@InjectConstructor
class FooDAO(val dbClient: DBClient)
На первый взгляд (и, вероятно, по незнанию) я подумал @ShardSingleton
, что этого было бы достаточно.
Ожидается ли это?
Вот суть, демонстрирующая поведение: https://gist.github.com/bfreuden/a866b21c5a6342a3ce1ed26aa636f9f6