【问题标题】:Koin 2.0 with Nested-Scope or SubComponent concept具有嵌套范围或子组件概念的 Koin 2.0
【发布时间】: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&lt;&gt;()

https://github.com/InsertKoinIO/koin/issues/513

Koin sharing instances between modules

但我认为这不是一种干净的方法和依赖注入。

【问题讨论】:

    标签: android dependency-injection koin koin-scope


    【解决方案1】:

    您可以尝试https://github.com/beyama/winter,它的灵感来自 Koin,但具有可以像 Dagger 的子组件一样使用的子图。几年来,Winter 已被用于一些主要应用程序的生产,安装量达数百万。我希望可以在这里发布一个示例:https://play.google.com/store/apps/details?id=de.prosiebensat1digital.seventv 免责声明:我认识作者,并且自发布以来一直在使用他的库。到目前为止,根据我的经验,它一直很稳定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多