В чем разница между StartKoin и install(Koin) для приложений ktor

Я работаю над ktor api и впервые добавляю DI. Я видел, как вещи делаются двумя разными способами, и я не мог найти способ, которым они означали бы что-то другое. Есть ли что-то, что делает Start, чего не делает установка? Имеет ли значение, используете ли вы embeddedServer или EngineMain?

Вот модуль, устанавливаемый только для контекста

val mainModule = module(createdAtStart = true) {
    // this creates a global kmongo client for our db
    factory { KMongo.createClient(System.getenv("MONGO_URI") ?: "") }
}

способ 1:

fun main(args: Array<String>): Unit = EngineMain.main(args)

@Suppress("unused")
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {

    startKoin {
        modules(mainModule)
    }
}

способ 2:

fun main(args: Array<String>): Unit = EngineMain.main(args)

@Suppress("unused")
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {

    install(Koin){
        modules(mainModule)
    }
}

person stegnerd    schedule 14.05.2021    source источник


Ответы (1)


ну вот главное отличие

**
 * Start a Koin Application as StandAlone
 */
fun startKoin(appDeclaration: KoinAppDeclaration): KoinApplication = KoinPlatformTools.defaultContext().startKoin(appDeclaration)

https://github.com/InsertKoinIO/koin/blob/392682bc6ebe428952485a45eb13af06a79789eb/core/koin-core/src/commonMain/kotlin/org/koin/core/context/DefaultContextExt.kt

/**
     * Feature installation script
     */
    public fun install(pipeline: TPipeline, configure: TConfiguration.() -> Unit): TFeature

https://github.com/ktorio/ktor/blob/main/ktor-server/ktor-server-core/jvm/src/io/ktor/application/ApplicationFeature.kt

install берется из библиотеки ktor Которая может быть реализована по-разному Где startKoin из своей

person Ananiya Jemberu    schedule 14.05.2021