Hello, I'm a Korean student who is interested in K...
# multiplatform
v
Hello, I'm a Korean student who is interested in Kotlin Multiplatform! I'm trying to use Koin in Kotlin Multiplatform for Desktop and AOS, and I have a question. If using Koin for common Ktor API, then where put the
startKoin
in the logic? Which do you prefer to put on the common package or each native package?
l
저는 각 플랫폼의 어플리케이션 진입점에서 startKoin을 호출합니다.
v
@Lee Taehoon 그렇다면 혹시 Desktop에서는 어디 부분에 넣으시나요? 열심히 찾아봤지만 안드로이드의 Application 클래스와 유사한 기능이 없는 것 같아 우선... 아래처럼 처리 하였는데 다른 방법이 있을까요?
Copy code
// Main.kt in Desktop
fun main() = application {
    // blah blah...

    LaunchedEffect(Unit) {
        CommonAppKoin.startKoin()
    }
}

// CommonAppKoin
object CommonAppKoin {
    fun startKoin() = startKoin {
        modules(commonApiModule, commonDataModule)
    }
}
또한 말씀하신 내용이 common 패키지에서 CommonAppKoin를 사용하는 것이 아닌 각각 패키지에 DesktopKoin, MobileKoin etc... 이런식으로 플랫폼 별로 만드셨다는 말씀이 맞을까요!
l
Desktop은 개발을 안 해봤는데,
데스크탑은 개발 안 해봤는데
Copy code
fun main() {
    CommonAppKoin.startKoin()
    
    return application { 
        
    }
}
이런 식으로 해도 될 것 같네요. 코인 모듈을 플랫폼 종속적인 항목이 필요한 경우에만 플랫폼 별로 만들어서 startKoin 함수에서 넣어줍니다. 대표적으로 데이터베이스 모듈 같은 경우에 아래처럼 해주고 있습니다.
Copy code
expect val databaseModule: Module

fun startKoin(appDeclaration: KoinAppDeclaration) = startKoin {
    appDeclaration()
    modules(databaseModule)
}
v
@Lee Taehoon 아 그러네요 너무 딱딱하게만 생각한 것 같습니다 감사합니다!
c
Not sure about the workspace policy but if you write in English a lot more people could’ve benefit from this.
l
Ok, Thanks!