ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
                )
            }
        }
    }

     

    그럼 이만 끝!

     

     

Designed by Tistory.