Долгое время я боролся с компонентами кинжала.
Сначала я создал Injectors
класс для каждого пользовательского компонента , который содержал статическое поле либо с WeakReference<Component>
, либо просто Component
, так что у меня всегда был доступ к этому компоненту через статический метод.
Но я думаю, что это довольно плохой подход, потому что WeakReference
можно очистить, чтобы вы не получили тот же Component
, а также вы можете просто забыть очистить Component
в статическом поле.
Я разработал другой подход, когда у меня есть ComponentsHolder
интерфейс, который реализован в App и содержит несколько методов для добавления, удаления и проверки наличия компонента в HashMap<String, Component>
внутри того же класса App.
Таким образом, этот подход в сочетании с расширениями kotlin для Context
дал мне прекрасную возможность вводить вещи в любое место, где у меня есть Context
, например:
context.injector(Component::class) {
inject(this@ObjectWhereToInject)
}
Так что я не против, может, я что-то не так делаю? Или есть лучший подход для хранения и извлечения компонентов кинжала?