Как вводить в варт в Котлин?

Я пытаюсь реализовать Dagger2 в моем проекте Kotlin, но у меня проблемы с аннотацией @Inject .

В Java это выглядит так, и это отлично работает:

 public class FooActivity extends Activity { @Inject @Named("accessTokenObservable") public Flowable<Optional<AccessToken>> accessTokenObservable; @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); App.getGraph().inject(this); } } 

Но как я должен написать строку @Inject в Котлин?

Когда я использую это:

 @Inject @Named("accessTokenObservable") var accessTokenObservable: Flowable<Optional<AccessToken>>? = null 

Я получаю это сообщение об ошибке:

 Error:Dagger does not support injection into private fields 

Если я использую lateinit :

 @Inject @Named("accessTokenObservable") lateinit var accessTokenObservable: Flowable<Optional<AccessToken>> 

Я получаю это сообщение об ошибке:

 Error:Flowable<Optional<AccessToken>> cannot be provided without an @Provides- or @Produces-annotated method. 

Каков правильный синтаксис для инъекций в Котлин?

Я просто использую

 @Inject lateinit var presenter: ItemsPresenter override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) ... } 

Без проблем

Вы должны изменить код инъекции следующим образом:

 @field:[Inject Named("accessTokenObservable")] lateinit var accessTokenObservable: Flowable<Optional<AccessToken>> 

, и он будет исправлен.

Предоставляете ли вы Flowable<Optional<AccessToken>> accessTokenObservable где-то в вашем коде?

Если не Error:Flowable<Optional<AccessToken>> cannot be provided without an @Provides- or @Produces-annotated method. может быть произведено. Потому что вы пытаетесь ввести объект, не предоставляя его. В этом случае вам необходимо предоставить в своем классе инжектора:

@Provide @Named("accessTokenObservable") fun provideAccessTokenObservable : Flowable<Optional<AccessToken>>{ return yourAccessTokenObservable }

то вам нужно ввести свой объект в свою деятельность

@Inject @Named("accessTokenObservable") lateinit var accessTokenObservable: Flowable<Optional<AccessToken>>