【发布时间】:2020-01-24 02:06:22
【问题描述】:
有没有办法在 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)中,我找不到路。
有些回答说使用
GlobalContext.get().koin.getScope("Parent").get<>()。
https://github.com/InsertKoinIO/koin/issues/513
Koin sharing instances between modules
但我认为这不是一种干净的方法和依赖注入。
【问题讨论】:
标签: android dependency-injection koin koin-scope