メインコンテンツまでスキップ

Koinを始めよう

Koinは、DSL、軽量コンテナ、および実用的なAPIです。 Koinモジュール内で定義を宣言したら、Koinコンテナを起動する準備が整います。

startKoin関数

startKoin関数は、Koinコンテナを起動するための主要なエントリポイントです。 実行するには、Koinモジュールのリストが必要です。 モジュールがロードされ、定義はKoinコンテナによって解決される準備ができています。

.Koinの開始

// グローバルコンテキストでKoinApplicationを開始
startKoin {
// 使用するモジュールを宣言
modules(coffeeAppModule)
}

startKoinが呼び出されると、Koinはすべてのモジュールと定義を読み取ります。 Koinは、必要なインスタンスを取得するために、get()またはby inject()呼び出しの準備ができています。

Koinコンテナには、いくつかのオプションがあります。

  • logger - ロギングを有効にする - <<logging.adoc#_logging,logging>> セクションを参照
  • properties()fileProperties() または environmentProperties() - 環境変数、koin.propertiesファイル、追加のプロパティからプロパティをロードする ... - <<properties.adoc#_lproperties,properties>> セクションを参照
備考

startKoinは複数回呼び出すことはできません。 モジュールをロードするポイントが複数必要な場合は、loadKoinModules関数を使用してください。

開始の裏側 - 水面下のKoinインスタンス

Koinを開始すると、Koinコンテナ構成インスタンスを表すKoinApplicationインスタンスが作成されます。 起動すると、モジュールとオプションの結果であるKoinインスタンスが生成されます。 このKoinインスタンスは、KoinComponentクラスで使用されるように、GlobalContextによって保持されます。

GlobalContextは、KoinのデフォルトのJVMコンテキスト戦略です。 これはstartKoinによって呼び出され、GlobalContextに登録されます。 これにより、Koin Multiplatformの観点から、さまざまな種類のコンテキストを登録できます。

startKoin後にモジュールをロードする

startKoin関数を複数回呼び出すことはできません。 ただし、loadKoinModules()関数を直接使用できます。

この関数は、Koinを使用したいSDKメーカーにとって興味深いものです。なぜなら、starKoin()関数を使用する必要がなく、ライブラリの開始時にloadKoinModulesを使用するだけだからです。

loadKoinModules(module1,module2 ...)

モジュールのアンロード

定義の束をアンロードし、与えられた関数でそれらのインスタンスを解放することも可能です。

unloadKoinModules(module1,module2 ...)

Koinの停止 - すべてのリソースを閉じる

すべてのKoinリソースを閉じ、インスタンスと定義を削除できます。 このためには、KoinのGlobalContextを停止するために、どこからでもstopKoin()関数を使用できます。 それ以外の場合は、KoinApplicationインスタンスで、close()を呼び出すだけです。

ロギング

Koinには、Koinのアクティビティ(割り当て、ルックアップなど)をログに記録するためのシンプルなロギングAPIがあります。 ロギングAPIは、以下のクラスで表されます。

Koinロガー

abstract class Logger(var level: Level = Level.INFO) {

abstract fun log(level: Level, msg: MESSAGE)

fun debug(msg: MESSAGE) {
log(Level.DEBUG, msg)
}

fun info(msg: MESSAGE) {
log(Level.INFO, msg)
}

fun error(msg: MESSAGE) {
log(Level.ERROR, msg)
}
}

Koinは、ターゲットプラットフォームに応じて、いくつかのロギングの実装を提供します。

  • PrintLogger - コンソールに直接ログを記録します(koin-coreに含まれています)
  • EmptyLogger - 何もログに記録しません(koin-coreに含まれています)
  • SLF4JLogger - SLF4Jでログを記録します。 ktorとsparkで使用されます(koin-logger-slf4jプロジェクト)
  • AndroidLogger - Android Loggerにログを記録します(koin-androidに含まれています)

開始時にロギングを設定する

デフォルトでは、KoinはEmptyLoggerを使用します。 次のように、PrintLoggerを直接使用できます。

startKoin {
logger(LEVEL.INFO)
}

プロパティのロード

開始時にいくつかのタイプのプロパティをロードできます。

  • 環境変数 - システムプロパティをロードします
  • koin.propertiesファイル - /src/main/resources/koin.propertiesファイルからプロパティをロードします
  • "extra"開始プロパティ - startKoin関数で渡される値のマップ

モジュールからプロパティを読み取る

Koinの開始時にプロパティをロードしてください。

startKoin {
// デフォルトの場所からプロパティをロードします
// (つまり、`/src/main/resources/koin.properties`)
fileProperties()
}

Koinモジュールでは、キーでプロパティを取得できます。

/src/main/resources/koin.propertiesファイル内

// キー - 値
server_url=http://service_url

getProperty関数でロードするだけです。

val myModule = module {

// "server_url"キーを使用してその値を取得します
single { MyService(getProperty("server_url")) }
}