I'm wondering how to properly scope dependencies with Koin library.
Since Google recommends a single Activity
architecture the AndroidX Navigation lib has become a key library to facilitate this by easily swapping Fragment
s.
A typical modern Android app has multiple features separated in packages and/or Gradle
modules.
These feature modules provides a graph that can be used in the root graph as nested graphs. (See picture)
<?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>
Following rules should be respected:
More concretely:
How to achieve this in Koin?
Note that sharing dependencies is not limited to ViewModel only.
I should be able to share any arbitrary class within my scope.
Actually, I think you can use loadModule
and unLoadModule
in your feature Modules and with some layer modules like network
uiKit
and ... control their needs.
FeatureA can inject Activity and App dependencies, but not FeatureB dependencies
I think this is not reasonable that inject your appModule in the FeatueA, you can have a coreModule
and add this in your all modules that needed, also you can find your activity with requireActivity()
in your fragmnet for example:D, so the FeatureA never can inject FeatureB dependencies, because they have no access to each other.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With