Koin DI(ver: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モジュールのネットワーククラスにコンテキストを直接送信する方法はありますか?
@Rajatと@Andreyの両方の答えは正しいです。実際、 sources を見ると、androidContext()
はget()
の単なる拡張関数であることがわかります。したがって、これら2つの定義は同じです。
_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()) }
}
_
アプリケーションコンテキストは、関数 androidContext()
を使用してモジュール内で使用できます。
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
これで問題が解決するはずです。