Найти в Дзене

Dependency Injection и SharedPreferences

При применении DI в учебном проекте понадобилось передавать SharedPreferences, как зависимость.

Мой вариант приложения создавал два разных файла SharedPreferences. Вот так я решил, когда изучали SharedPrefs. Они нужны были в разных сценариях использования приложения. Т.е. они имели разные имена и содержимое.

При описании способа получения зависимости в одном модуле указал для Koin:

factory<SharedPreferences> {
androidContext().getSharedPreferences(FIRSTACTIVITY_SHAREDPREFS, Context.MODE_PRIVATE)
}

В другом модуле:

factory<SharedPreferences> { androidContext().getSharedPreferences(SECONDACTIVITY_SHAREDPREFS, Context.MODE_PRIVATE) }

(По версии Дзен Контекст - это aWV3latdD0w)

В описании других зависимостей, которые требовали экземпляр SharedPrefences просто указывал get().

В итоге вышло несуразное:

при попытке использования данных из SharedPrefences получал пустые данные.

Оказалось, что в обе зависимости передавался один экземпляр SharedPrefences - тот, описание которого Koin нашел в графе первым.

Дело в том, что при описании получения зависимости я указал класс. И Koin конечно искал как создавать объекты такого класса.

В общем - не нашёл быстрого решения и отказался от использования двух файлов SharedPreferences. Данные стали получаться нормально.

А помог - дебаг! :)

Там я увидел, что в объекте SharedPrefences в памяти ссылка на файл

FIRSTACTIVITY_SHAREDPREFS, а не SECONDACTIVITY_SHAREDPREFS, как ожидал.

Ну и Вывод: описывать получение зависимости от одного класса (в моем случае - SharedPreferences) достаточно в одном модуле.