0

我正在为多显示器设备构建应用程序。该应用程序应可供 2 个不同的用户同时且独立地使用。虽然共享相同的数据,但它们都可以有不同的数据,SharedPreferences并且应用程序应该适应每个用户的需求。

这意味着该应用程序将MainActivity同时运行 2 个不同的实例,并且根据它们所在的显示,我需要加载 2 个不同的SharedPreferences文件。我Koin用于依赖注入,因为从内部Koin Module我无法检测到“需要此依赖项”的显示是什么,所以我有点卡住了。

我考虑过提供范围依赖,但我的Preferences类在不同的ViewModels(连接到连接到这些MainActivityes 之一的不同片段)、存储库类或Services 中大量使用,并且我不能scoped在非范围的依赖项中使用依赖项或我得到一个RuntimeException因为Koin找不到创建我的类所需的依赖项。

我像这样提供我的Preferences文件:

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

Koin 模块:

scope<MainActivity> {
            // this gets injected into MainActivity and will hold whether this instance
            // is from the main or from the secondary display.
            scoped { CalendarDisplayManager() }

            scoped<SharedPreferences> {
                val isOnCoDriver = get<CalendarDisplayManager>().isMainDisplay
                val fileName = if (isOnCoDriver) "shared_preferences_main_display"
                else "shared_preferences_secondary_display"

                androidContext().getSharedPreferences(fileName, Context.MODE_PRIVATE)
            }
}

该解决方案目前不完整且无法正常工作。我怎样才能克服这个问题并区分何时Preferences需要由MainActivity主显示器或辅助显示器上的课程使用我的课程?

4

0 回答 0