Неразрешенная ссылка на модуль Koin

У меня есть все мои классы, которые я хотел бы добавить в класс modules как таковой.

    class modules {
        val myModule = module {
            MainActivityViewModel()
            single { MyRepo() }
        }
    }

У меня есть класс Application, который выглядит следующим образом и объявлен в манифесте.

    class MyApplication : Application() {
        override fun onCreate() {
            super.onCreate()
    
            // start Koin!
            startKoin {
                // declare used Android context
                androidContext(this@MyApplication)
                // declare modules
                modules(listOf(myModule)) <------Here my module is unresolved(AS says unresolved reference)
            }
        }
    }

Я использую Koin версии 2.1.6


person The_Martian    schedule 03.08.2020    source источник


Ответы (1)


myModule определяется внутри class modules. Вы не можете получить к нему доступ без экземпляра этого класса.

Большинство людей определяют модули прямо под объявлением класса Application как глобальную переменную. Вы можете сделать это private, чтобы он не был доступен из файла.

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        // start Koin!
        startKoin {
            // declare used Android context
            androidContext(this@MyApplication)
            // declare modules
            modules(listOf(myModule))
        }
    }
}

// Optionally make it private
val myModule = module {
    MainActivityViewModel()
    single { MyRepo() }
}

Теперь вы можете удалить class modules. Но если вам действительно нужен этот класс и вы создали его с определенной целью, вы можете создать экземпляр этого класса и вызвать его myModule переменную:

modules(listOf(modules().myModule))
person Jenea Vranceanu    schedule 03.08.2020