android - 具有嵌套范围或子组件概念的 Koin 2.0
问题描述
有没有办法在 Koin 上实现 Dagger 的 SubCompoent 概念?
我想做的事情是使用父范围的实例。
app_modules.kt
val favoriteModule = module {
scope(named<FavoriteFragment>()) {
scoped { GetFavoriteMovies(get()) }
scoped { FavoriteVMFactory(get(), get()) } // This need 'MovieEntityMovieMapper'
}
}
val popularModule = module {
scope(named<PopularFragment>()) {
scoped { GetPopularMovies(get()) }
scoped { PopularVMFactory(get(), get()) } // This need 'MovieEntityMovieMapper'
}
}
val searchModule = module {
scope(named<SearchFragment>()) {
scoped { SearchMovies(get()) }
scoped { SearchVMFactory(get(), get()) } // This need 'MovieEntityMovieMapper'
}
}
val mainModule = module {
scope(named<MainActivity>()) {
scoped { MovieEntityMovieMapper() }
// this ImageLoader also injected by Fragments
scoped<ImageLoader> { (activity: Activity) -> GlideImageLoader(activity) }
}
}
使用 Dagger,这可以通过 SubComponent 或 Component Dependency 来完成。
但是在 Koin(尤其是 2.0)中,我找不到路。
有人回答说 use
GlobalContext.get().koin.getScope("Parent").get<>()
。
https://github.com/InsertKoinIO/koin/issues/513
但我认为这不是一种干净的方法和依赖注入。
解决方案
You can try https://github.com/beyama/winter which is inspired by Koin but has child graphs that can be used like Dagger's subcomponents. Winter has been used in production for some major apps with several million installs for a few years now. I hope it is ok to post an example here: https://play.google.com/store/apps/details?id=de.prosiebensat1digital.seventv Disclaimer: I know the author and have been using his library myself since its release. So far it has been stable in my experience.
推荐阅读
- c# - Azure 事件网格订阅 VM 上的控制台应用程序
- javascript - JS while循环不会停止在true
- android - 使用 URL 方案的 Google Pay UPI 集成 - iOS
- arrays - Azure 逻辑应用程序,从提取存档到文件夹 FTP 连接器的数组中设置对象变量
- cmake - 在安装阶段执行过程,每次
- python - 如何拆分列表中占据相同索引位置的元素?
- google-apps-script - 从所有工作表中删除 3 列,除了 Google 表格上的主菜单
- c# - 使图像适合边框背景
- c# - 使用端点映射时如何读取请求正文?
- c++ - 如何让 python.h 与 mingw gcc 编译器一起工作