Вы не вводите заявку. Обратите внимание на пример Nauce , что ApplicationComponent имеет этот метод:
@Component(/* ... */) @Singleton public interface AppComponent {
/* ... */
void inject(App app);
}
Создав метод с одним аргументом, который возвращает void
, вы определили метод внедрения членов , который заполняет @Inject
-аннотированные поля и вызывает @Inject
-аннотированные методы для существующий экземпляр объекта. Поскольку Android сам создает ваш экземпляр Application, у него не будут автоматически заполняться поля @Inject
, поэтому вы можете добавить его к своему компоненту. (Вы делаете то же самое в Службах и Действиях, вызывая AndroidInjection.inject(this)
, но, поскольку вы несете ответственность за создание собственной реализации Компонента, эквивалентного вызова для Приложения нет.)
Не определяя AppInjector, Nauce вызывает это в onCreate
:
AppInjector.init(this);
Но в вашем примере это будет выглядеть примерно так, в App.kt:
override fun onCreate() {
super.onCreate()
applicationComponent = DaggerApplicationComponent
.builder()
.applicationModule(ApplicationModule(this))
.build()
// Inject this class's @Inject-annotated members.
applicationComponent.inject(this)
}
Для дальнейшего использования у вас также есть выбор: DaggerApplication (в dagger.android или dagger.android.support), который будет автоматически предоставлять все ваши инжекторы, пока вы создаете ApplicationComponent. расширить AndroidInjector<App>
и вернуть его из метода applicationInjector()
.