啟動 Koin
Koin 是一個 DSL、一個輕量級容器和一個實用型 API。一旦您在 Koin 模組中宣告了您的定義,您就可以準備啟動 Koin 容器了。
startKoin
函數
startKoin
函數是啟動 Koin 容器的主要進入點。它需要一個 Koin 模組清單 才能執行。 模組載入後,定義即可由 Koin 容器解析。
啟動 Koin
// start a KoinApplication in Global context
startKoin {
// declare used modules
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 時,我們會建立一個 KoinApplication
實例,它代表 Koin 容器的配置實例。一旦啟動,它將根據您的模組和選項產生一個 Koin
實例。 這個 Koin
實例隨後由 GlobalContext
持有,以便供任何 KoinComponent
類別使用。
GlobalContext
是 Koin 的預設 JVM 上下文策略。它由 startKoin
呼叫並註冊到 GlobalContext
。這將使我們能夠從 Koin 多平台的角度註冊不同類型的上下文。
在 startKoin
之後載入模組
您無法呼叫 startKoin
函數超過一次。但您可以直接使用 loadKoinModules()
函數。
這個函數對於想要使用 Koin 的 SDK 開發者來說很有趣,因為他們不需要使用 startKoin()
函數,只需在其函式庫啟動時使用 loadKoinModules
即可。
loadKoinModules(module1,module2 ...)
卸載模組
也可以卸載一批定義,然後使用指定的函數釋放它們的實例:
unloadKoinModules(module1,module2 ...)
停止 Koin - 關閉所有資源
您可以關閉所有 Koin 資源並捨棄實例和定義。為此,您可以從任何地方使用 stopKoin()
函數來停止 Koin GlobalContext
。 否則在 KoinApplication
實例上,只需呼叫 close()
。
日誌記錄
Koin 具有一個簡單的日誌記錄 API,用於記錄任何 Koin 活動(分配、查詢等)。日誌記錄 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 日誌記錄器(包含在koin-android
中)
在啟動時設定日誌記錄
預設情況下,Koin 使用 EmptyLogger
。您可以直接使用 PrintLogger
如下所示:
startKoin {
logger(LEVEL.INFO)
}
載入屬性
您可以在啟動時載入數種屬性:
- 環境屬性 - 載入 系統 屬性
- koin.properties 檔案 - 從
/src/main/resources/koin.properties
檔案載入屬性 - 「額外」啟動屬性 - 傳遞給
startKoin
函數的值對映
從模組讀取屬性
確保在 Koin 啟動時載入屬性:
startKoin {
// Load properties from the default location
// (i.e. `/src/main/resources/koin.properties`)
fileProperties()
}
在 Koin 模組中,您可以透過其鍵獲取屬性:
在 /src/main/resources/koin.properties 檔案中
// Key - value
server_url=http://service_url
只需使用 getProperty
函數載入它:
val myModule = module {
// use the "server_url" key to retrieve its value
single { MyService(getProperty("server_url")) }
}