카테고리 없음

[Android] koin 적용시 에러 DefinitionOverrideException: Definition '[Factory:'kotlin.Unit']' try to override existing definition.

koucop 2021. 10. 10. 15:18

 

 

안녕 형들~ 🙌

오늘은 koin 적용시에 module 을 잘 적용하지 못해서 발생하는 DefinitionOverrideException 에 처리해 보려고해!! 

 

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: [project], PID: 24834
    java.lang.RuntimeException: Unable to create application com.xxxxx.Application: org.koin.core.error.DefinitionOverrideException: Definition '[Factory:'kotlin.Unit']' try to override existing definition. Please use override option to fix it
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7540)
        at android.app.ActivityThread.access$1500(ActivityThread.java:301)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2158)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8595)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

 

koin 그래프에 모듈이 없던지 있더라도 override 가 안되어있는 경우에 발생하는 에러인데,

한번 정의된 koin 을 사용하는 경우에, loadKoinModules 를 사용하고 그 안에 들어가는 module 쪽에

(override = true) { single | factory } 를 설정해줘서 해당 에러를 피할 수 있으니깐 잘 적용시켰는지 확인해주길 바래~

 

아래는 Test 클래스가 있다고 할 때 loadKoinModules 을 이용해서 어떻게 override 시킬 수 있는지 적어본 거니깐 참고 해주면 좋겠어~

 

loadKoinModules(
  module(override = true) { newModule }
)

val newModule = single<Test> { Test() }

 

그럼 이만 끝!