Skip to content

Koinを起動する

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

startKoin関数

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

Koinの起動

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

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

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

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

INFO

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

起動の裏側 - Koinインスタンスの内部

Koinを起動すると、Koinコンテナの設定インスタンスを表すKoinApplicationインスタンスが作成されます。起動されると、モジュールとオプションに基づいてKoinインスタンスを生成します。このKoinインスタンスはGlobalContextによって保持され、任意のKoinComponentクラスで使用されます。

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

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

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

この関数は、Koinを使いたいSDK開発者にとって興味深い機能です。なぜなら、彼らはstartKoin()関数を使う必要がなく、ライブラリの開始時にloadKoinModulesを使うだけでよいからです。

kotlin
loadKoinModules(module1,module2 ...)

モジュールのアンロード

定義のセットをアンロードし、指定された関数でそれらのインスタンスを解放することも可能です。

kotlin
unloadKoinModules(module1,module2 ...)

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

Koinのすべてのリソースを閉じ、インスタンスと定義を破棄できます。そのためには、どこからでもstopKoin()関数を使用して、KoinのGlobalContextを停止できます。あるいは、KoinApplicationインスタンスに対して、単にclose()を呼び出すだけです。

ロギング

Koinには、Koinの任意のアクティビティ(アロケーション、ルックアップなど)をログに記録するためのシンプルなロギングAPIがあります。ロギングAPIは以下のクラスによって表現されます。

Koinロガー

kotlin
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ロガーにログを出力します (koin-androidに含まれています)

起動時にロギングを設定する

デフォルトでは、KoinはEmptyLoggerを使用します。以下の方法でPrintLoggerを直接使用できます。

kotlin
startKoin {
    logger(LEVEL.INFO)
}

プロパティのロード

起動時にいくつかの種類のプロパティをロードできます。

  • 環境プロパティ - システムプロパティをロードします
  • koin.propertiesファイル - /src/main/resources/koin.propertiesファイルからプロパティをロードします
  • 「追加の」起動プロパティ - startKoin関数に渡される値のマップ

モジュールからプロパティを読み込む

Koinの起動時にプロパティをロードするようにしてください。

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

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

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

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

getProperty関数を使ってロードするだけです。

kotlin
val myModule = module {

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