【问题标题】:How to Inject application context from 'app' module to 'network' module using Koin DI如何使用 Koin DI 将应用程序上下文从“app”模块注入“network”模块
【发布时间】:2018-11-22 23:38:11
【问题描述】:

我正在开发一个基于 Koin DI(版本:1.0.1)的应用程序,其中包含 2 个模块(:app 和:network)。我在 :network 模块中要求具有“上下文”。以下是我的实现方式:

**Module**:
val appModule = module {
    viewModel { LoginViewModel(get()) }
}

**Activity**:
private val viewModel by viewModel<LoginViewModel>()

**ViewModel**:
class LoginViewModel(val context: Context): ViewModel() {
  ...
  // Send "context" to network class in :network module
  ...
 }

问题:有什么方法可以直接将上下文发送到 :network 模块中的网络类?

【问题讨论】:

    标签: android koin


    【解决方案1】:

    @Rajat 和@Andrey 的两个答案都是正确的。事实上,如果你看一下sources,你会发现androidContext()只是get()的扩展函数,所以这两个定义是相同的:

    val appModule = module {
        viewModel { LoginViewModel(get()) }
    }
    

    ...

    val appModule = module {
        viewModel { LoginViewModel(androidContext()) }
    }
    

    回答您的问题,因为get()androidContext()module DSL 对象的成员,您可以这样做:

    val networkModule = module {
       single { Network(androidContext()) }
    }
    

    或者简单地说(为了简洁起见,我更喜欢这个):

    val networkModule = module {
       single { Network(get()) }
    }
    

    【讨论】:

      【解决方案2】:

      应用程序上下文可通过函数androidContext() 在模块内获得。

      【讨论】:

      • 链接已损坏。
      【解决方案3】:
      val appModule = module {
          viewModel { LoginViewModel(androidContext()) }
      }
      

      这应该可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        相关资源
        最近更新 更多