При применении 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) достаточно в одном модуле.