【发布时间】:2020-12-24 13:38:08
【问题描述】:
我想知道如何使用 Koin 库正确地确定依赖关系的范围。
自从 Google 推荐 single Activity architecture 以来,AndroidX Navigation lib 已成为一个关键库,通过轻松交换 Fragments 来促进这一点。
典型的现代 Android 应用在包和/或 Gradle 模块中具有多种功能。
这些功能模块提供了一个可以在根图中用作嵌套图的图。 (见图)
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_graph"
app:startDestination="@id/mainFragment">
<include app:graph="@navigation/nav_graph_feature_a" />
<include app:graph="@navigation/nav_graph_feature_b" />
<fragment
android:id="@+id/mainFragment"
android:name="com.example.androidx_navigation.MainFragment"
android:label="MainFragment"
tools:layout="@layout/fragment_main">
<action
android:id="@+id/action_mainFragment_to_featureAFragment1"
app:destination="@id/nav_graph_feature_a" />
<action
android:id="@+id/action_mainFragment_to_featureBFragment1"
app:destination="@id/nav_graph_feature_b" />
</fragment>
</navigation>
应遵守以下规则:
- 每一层都代表一个范围。
- 内层可以注入外层中定义的任何内容。
- 没有重叠的层应该不能注入彼此的依赖关系。
- 离开层应处理其依赖关系。
更具体地说:
- FeatureA 可以注入 Activity 和 App 依赖项,但不能注入 FeatureB 依赖项
- FeatureB 可以注入 Activity 和 App 依赖项,但不能注入 FeatureA 依赖项
如何在 Koin 中实现这一点?
请注意,共享依赖项不仅限于 ViewModel。
我应该能够在我的范围内共享任意类。
【问题讨论】:
-
我还创建了一个入门演示项目,您可以使用它来开始解决方案。 github.com/timrijckaert/koin/tree/unclear-unload-per-feature/…
标签: android android-architecture-navigation koin navigation-architecture koin-scope