-
[Android] koin 적용시 에러 NoBeanDefFoundException Check your definitions!카테고리 없음 2021. 10. 10. 15:44
안녕 형들~ 🙌
오늘은 koin 적용시에 definition 을 잘 적용하지 못해서 발생하는 NoBeanDefFoundException 에 처리해 보려고해!!
E/AndroidRuntime: FATAL EXCEPTION: main
Process: [project], PID: 20588
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.reflect.InvocationTargetException
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)
Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.kwang0.di.feature.SecondContract$Presenter'. Check your definitions!에러로그를 보고 알 수 있는건 SecondContract Presenter 를 잘 정의해주지 못해서 생기는 문제라는데...
singleton 으로 지정한 부분이 standAloneContext 로 되어있거나
startKoin 으로 모듈을 잘 정의해주고 있다고 생각했는데 parameter 를 잘 집어넣고 있지 않아서 그런거더라구!!
그래서 위와같은 에러가 발생했을 때 해결방법은
1. (startKoin 의 import 를 StandAloneContext 로 설정해주고 있을 때) 이유는 잘 모르겠는데, stand alone context 를 사용해서 적용시킨 경우에 잘 반영 안되는 경우가 있어서 android 쪽 startKoin 으로 해주면 해결될거야~
From import org.koin.standalone.StandAloneContext.startKoin To import org.koin.android.ext.android.startKoin
2. modules 안쪽에 연속으로 module 등이 들어가 있는지 확인해보고 각각 빼주면 될거야~
val testModule = module { single<TestRepository> { TestRepositoryImpl() } } var appModules = arrayOf( testModule, ) val modules = arrayOf( *appModules, ) class DIApplication : Application() { override fun onCreate() { super.onCreate() //... startKoin { androidLogger() androidContext(this@DIApplication) modules( *modules ) } } }
그럼 이만 끝!