Skip to content

Koinを起動する

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

startKoin関数

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

.Koinの起動

kotlin
// start a KoinApplication in Global context
startKoin {
    // declare used modules
    modules(coffeeAppModule)
}

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

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

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

INFO

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

Koinの起動を拡張する(KMPなどでの再利用に役立つ)

Koinは現在、KoinConfigurationの再利用可能で拡張可能な設定オブジェクトをサポートしています。共有設定をプラットフォーム間(Android、iOS、JVMなど)で利用したり、異なる環境に合わせたりするために抽出できます。これはincludes()関数で行うことができます。以下では、共通の設定を簡単に再利用し、Android環境設定を追加するためにそれを拡張する方法を示します。

kotlin
fun initKoin(config : KoinAppDeclaration? = null){
   startKoin {
        includes(config) //can include external configuration extension
        modules(appModule)
   }
}

class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        initKoin {
            androidContext(this@MainApplication)
            androidLogger()
        }
    }
}

起動の裏側 - 内部の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 display(level: Level, msg: MESSAGE)

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

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

    fun warn(msg: MESSAGE) {
        log(Level.WARNING, 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 {
    // Load properties from the default location
    // (i.e. `/src/main/resources/koin.properties`)
    fileProperties()
}

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

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

java
// Key - value
server_url=http://service_url

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

kotlin
val myModule = module {

    // use the "server_url" key to retrieve its value
    single { MyService(getProperty("server_url")) }
}

Koinオプション - 機能フラグ (4.1.0)

Koinアプリケーションは、専用のoptionsセクションを通じて、いくつかの実験的な機能を有効にできるようになりました。例えば、以下のようになります。

kotlin
startKoin {
    options(
        // activate ViewModel Scope factory feature 
        viewModelScopeFactory()
    )
}