gpt4 book ai didi

android - Koin 共享依赖关系范围为嵌套图

转载 作者:行者123 更新时间:2023-12-03 13:34:03 27 4
gpt4 key购买 nike

我想知道如何使用 Koin 库正确地确定依赖关系的范围。
由于谷歌推荐 single Activity architecture AndroidX Navigation lib已成为通过轻松交换 Fragment 来促进这一点的关键库s。
一个典型的现代 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>
Koin scoping of feature modules
应遵守以下规则:
  • 每层代表一个范围。
  • 内层可以注入(inject)外层定义的任何东西。
  • 没有重叠的层不应该能够注入(inject)彼此的依赖关系。
  • 离开一个层应该处理它的依赖关系。

  • 更具体地说:
  • FeatureA 可以注入(inject) Activity 和 App 依赖,但不能注入(inject) FeatureB 依赖
  • FeatureB 可以注入(inject) Activity 和 App 依赖,但不能注入(inject) FeatureA 依赖

  • 如何在 Koin 中实现这一点?

    Note that sharing dependencies is not limited to ViewModel only.
    I should be able to share any arbitrary class within my scope.

    最佳答案

    其实我觉得你可以用loadModuleunLoadModule在您的功能模块和一些层模块中,如 network uiKit并且……控制他们的需求。FeatureA can inject Activity and App dependencies, but not FeatureB dependencies我认为在FeatueA中注入(inject)你的appModule是不合理的,你可以有一个coreModule并将其添加到您需要的所有模块中,您也可以通过 requireActivity() 找到您的 Activity 例如:D,因此 FeatureA 永远不能注入(inject) FeatureB 依赖项,因为它们无法相互访问。

    关于android - Koin 共享依赖关系范围为嵌套图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65439079/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com