🥥 Cokoin
Compose(マルチプラットフォームおよびJetpack)用のインジェクションライブラリ、Koinラッパーです。@Composable関数を使用してKoinContextを設定します。
インストール
ライブラリはMaven Centralでホストされています。モジュールのbuild.gradle.ktsまたはbuild.gradleに以下のパッケージを追加してください:
dependencies {
implementation("dev.burnoo:cokoin:1.0.0")
implementation("dev.burnoo:cokoin-android-viewmodel:1.0.0") // for Androidx ViewModel
implementation("dev.burnoo:cokoin-android-navigation:1.0.0") // for Compose Navigation // REMOVE "org.koin:koin-androidx-compose:X.Y.Z" if you were using it
}
使用法
このライブラリはKoinのApplicationとModulesを使用しています。Koinのドキュメントはここで確認できます: https://insert-koin.io/。
コアライブラリにはKoinアプリケーションの設定に使われる@Composable Koin関数が含まれています。@Previewと一緒に使用することができます。
val appModule = module {
factory { "Hello, DI!" }
}@Preview
@Composable
fun App() {
Koin(appDeclaration = { modules(appModule) }) {
val text = get()
Text(text)
}
}
スコープ
スコープは、コンポーザブルを@Composable KoinScopeでラップすることで作成されます:
data class A(val value: String)val scopedModule = module {
scope {
scoped { A("scopeA") }
}
scope {
scoped { A("scopeB") }
}
}
@Preview
@Composable
fun Test() {
Koin(appDeclaration = { modules(scopedModule) }) {
Column {
KoinScope(getScope = { createScope() }) {
Text(get().value)
}
KoinScope(getScope = { createScope() }) {
Text(get().value)
}
}
}
}
ViewModel
#### dev.burnoo:cokoin-android-viewmodel:x.y.z
@Composable 内で ViewModel を取得するには getViewModel を呼び出します:
class MainViewModel : ViewModel() {
val data = "Hello, DI!"
}private val viewModelModule = module {
viewModel { MainViewModel() }
}
@Composable
fun ViewModelSample() {
Koin(appDeclaration = { modules(viewModelModule) }) {
val viewModel = getViewModel()
Text(viewModel.data)
}
}
getViewModel
はKoinの注入パラメータ
およびSaveStateHandleをサポートします。高度な例は
こちらで確認できます。
Compose Navigation
#### dev.burnoo:cokoin-android-navigation:x.y.z
まずNavHostをKoinNavHostに置き換えます:
@Composable
fun Sample() {
val navController = rememberNavController()
Koin(appDeclaration = { modules(viewModelModule) }) {
KoinNavHost(navController, startDestination = "1") {
composable("1") {
Screen1()
}
}
}
}次に、composable画面内でgetNavControllerとgetNavViewModelを使用します。
@Composable
fun Screen1() {
val navController = getNavController()
Button(onClick = { navController.navigate("2") }) {
val navViewModel = getNavViewModel()
//...
}
}
ナビゲーションを KoinNavHost でラップしたくない場合は、viewModelStoreOwner パラメータを使用した getViewModel で同様の結果を得ることができます:@Composable
fun Screen1(navController: NavController) {
Button(onClick = { navController.navigate("2") }) {
val viewModel = getViewModel(
viewModelStoreOwner = navController.getBackStackEntry("root")
)
//...
}
}
ライセンス
Copyright 2021 Bruno WieczorekLicensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--- Tranlated By Open Ai Tx | Last indexed: 2026-03-15 ---