Недавно я интегрировал Кинжал в проект, который использует ContentProviders. Я создаю один экземпляр объекта ObjectGraph в своем пользовательском объекте приложения и в основном в каждом управляемом компоненте:
- Активность,
- Фрагмент
- Сервис
... Затем я вызываю getApplication(), опускаясь к своему пользовательскому объекту приложения и принудительно впрыскивая через некоторую пользовательскую реализацию в своем классе Application. Это, по-видимому, предписанный метод выполнения инъекций, основанный на образцах, которые я видел, опубликованных ребятами на площади.
Этот шаблон не выполняется для экземпляров ContentProvider, хотя, поскольку их жизненный цикл не так предсказуемо привязан к жизненному циклу объекта Application, то есть ContentProviders могут быть и, как я часто наблюдаю, создаются до того, как объект Application (по причинам, которые я еще не понял).
Итак... у кого-нибудь есть хороший способ инъекции ContentProviders с использованием кинжала? Я до сих пор это сделал, имея вызов isInjected()
в начале каждого из моих методов интерфейса ContentProvider (вставка, запрос, обновление, удаление)... в основном хакерская форма ленивой инициализации. Но это кажется далеким от идеала. Существует ли более предписанный подход к инъекции ContentProviders?