본문으로 건너뛰기

Ktor의 의존성 주입 (Dependency Injection)

koin-ktor 모듈은 Ktor를 위한 의존성 주입을 제공합니다.

Koin 플러그인 설치

Ktor에서 Koin 컨테이너를 시작하려면 다음과 같이 Koin 플러그인을 설치하십시오.

fun Application.main() {
// Koin 설치
install(Koin) {
slf4jLogger()
modules(helloAppModule)
}

}

Ktor에서 주입하기

Koin의 inject()get() 함수는 Application, Route, Routing 클래스에서 사용할 수 있습니다.

fun Application.main() {

// HelloService 주입
val service by inject<HelloService>()

routing {
get("/hello") {
call.respondText(service.sayHello())
}
}
}

Ktor Request Scope에서 Resolve하기 (4.1.0부터)

Ktor request scope 타임라인 내에서 유지되는 컴포넌트를 선언할 수 있습니다. 이를 위해 requestScope 섹션 내에서 컴포넌트를 선언하기만 하면 됩니다. Ktor 웹 요청 범위에서 인스턴스화할 ScopeComponent 클래스가 주어지면 다음과 같이 선언합니다.

requestScope {
scopedOf(::ScopeComponent)
}

HTTP 호출에서 call.scope.get()을 호출하여 올바른 의존성을 resolve합니다.

routing {
get("/hello") {
val component = call.scope.get<ScopeComponent>()
// ...
}
}
노트

각 새로운 요청마다 scope가 다시 생성됩니다. 이는 각 요청에 대해 scope 인스턴스를 생성하고 삭제합니다.

외부 Ktor 모듈에서 Koin 실행하기

Ktor 모듈의 경우 특정 Koin 모듈을 로드할 수 있습니다. koin { } 함수로 선언하기만 하면 됩니다.

fun Application.module2() {

koin {
// koin 모듈 로드
modules(appModule2)
}

}

Ktor 이벤트

KTor Koin 이벤트를 수신할 수 있습니다.

fun Application.main() {
// ...

// Ktor 기능 설치
environment.monitor.subscribe(KoinApplicationStarted) {
log.info("Koin started.")
}

environment.monitor.subscribe(KoinApplicationStopPreparing) {
log.info("Koin stopping...")
}

environment.monitor.subscribe(KoinApplicationStopped) {
log.info("Koin stopped.")
}

//...
}