Приложение для нескольких дисплеев Android с koin — вводит разные настройки для одного и того же действия в зависимости от экрана, на котором оно выполняется

#android #kotlin #dependency-injection #koin #koin-scope

Вопрос:

Я создаю приложение для устройства с несколькими дисплеями. Приложение должно быть доступно 2 разным пользователям одновременно и независимо. При совместном использовании одних и тех же данных они могут отличаться SharedPreferences друг от друга, и приложение должно адаптироваться к потребностям каждого пользователя.

Это означает, что приложение будет работать в 2 разных MainActivity экземплярах одновременно, и в зависимости от того, на каком дисплее они отображаются, мне нужно загрузить 2 разных SharedPreferences файла. Я использую Koin для внедрения зависимостей, и поскольку изнутри Koin Module я не могу определить, для какого дисплея «нужна эта зависимость», я немного застрял.

Я думал о предоставлении уровня зависимости, но мой Preferences класс активно используется в различных ViewModels (которые подключены к различным фрагментам, которые подключены к одним из тех, MainActivity Эс), классы репозитория или Service S, и я не могу использовать scoped зависимость в области одного или я получаю RuntimeException , потому что Koin не можете найти необходимых зависимостей для создания моего класса.

Я предоставляю свой Preferences файл следующим образом:

 class Preferences(private val sharedPreferences: SharedPreferences) {...}  

Модуль Koin:

 scopelt;MainActivitygt; {  // this gets injected into MainActivity and will hold whether this instance  // is from the main or from the secondary display.  scoped { CalendarDisplayManager() }   scopedlt;SharedPreferencesgt; {  val isOnCoDriver = getlt;CalendarDisplayManagergt;().isMainDisplay  val fileName = if (isOnCoDriver) "shared_preferences_main_display"  else "shared_preferences_secondary_display"   androidContext().getSharedPreferences(fileName, Context.MODE_PRIVATE)  } }  

Это решение на данный момент является неполным и не работает. Как я мог бы преодолеть эту проблему и отличить, когда мой Preferences класс должен использоваться MainActivity на основном дисплее или на дополнительном дисплее?