как внедрить зависимость вне активности или фрагмента в кодеин? - PullRequest
0 голосов
/ 03 января 2019

хочу инициализировать интерфейс в неактивном классе или классе фрагментов с помощью Kodein DI Android

В примере показано, что использовать кодеин в активном режиме можно только в горячем режиме, но не в других частях

 class MainViewModel() :  KodeinAware{
   override val kodein by closestKodein()
   val repository : Repository by instance()
 }

вактивность работает, но в других классах показывает ошибку.Я хочу инициализировать интерфейс внутри другого класса

Ответы [ 2 ]

0 голосов
/ 08 марта 2019
0 голосов
/ 07 января 2019

closestKodein работает только в классах с поддержкой Android Context (таких как фрагменты и действия).Чтобы использовать его вне этих классов, вам нужен Android context.

. Документация Android четко гласит:

Внимание: ViewModel никогда не должен ссылаться на представление, жизненный цикл илилюбой класс, который может содержать ссылку на контекст активности.

[...]

Если ViewModel нужен контекст приложения, например, для поиска системной службы, он может расширить AndroidViewModel класса и имеет конструктор, который получает Application в конструкторе, поскольку класс Application расширяет Context.

Следовательно, для доступа к Kodein из ViewModel:

class MainViewModel(app: Application) : ApplicationViewModel(app), KodeinAware {
    override val kodein = app.kodein
    val repository : Repository by instance()
}
...