Не может быть предоставлен без @ Предоставляет-аннотированный метод

Было много других подобных вопросов, но ни один из ответов не применим к моему коду. Я не могу понять, что я сделал неправильно.

Сначала у меня есть NetworkModule который используется в качестве модуля для ApplicationComponent :

 @Module open class NetworkModule { companion object { private val BASE = "http://www.example.com/" } @Provides @ApplicationScope fun provideClient(): OkHttpClient = OkHttpClient() @Provides @ApplicationScope fun provideMoshi(): Moshi { return Moshi.Builder().add(InstantAdapter).add(UriAdapter).build() } @Provides @ApplicationScope fun provideRetrofit(client: OkHttpClient, moshi: Moshi): Retrofit { return Retrofit.Builder().client(client).baseUrl(BASE) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(MoshiConverterFactory.create(moshi)) .build() } @Provides @ApplicationScope fun provideArticleService(retrofit: Retrofit): ArticleService { return retrofit.create(ArticleService::class.java) } } 

 @ApplicationScope @Component(modules = arrayOf(ContextModule::class, RealmModule::class, NetworkModule::class)) interface ApplicationComponent {} 

Затем ApplicationComponent встроен в мой класс Application :

 class MyApplication : Application() { override fun onCreate() { super.onCreate() AndroidThreeTen.init(this) plantLog() drawDagger() } private fun drawDagger() { Injector.initializeApplicationComponent(this) } // ... } 

 object Injector { lateinit var applicationComponent: ApplicationComponent private set fun initializeApplicationComponent(context: Context) { applicationComponent = DaggerApplicationComponent.builder() .contextModule(ContextModule(context)) .networkModule(NetworkModule()) .realmModule(RealmModule()) .build() } // ... } 

Затем у меня есть ActivityModule который используется в ActivityComponent (который имеет ApplicationComponent как зависимость):

 @Module open class ActivityModule(private val activity: AppCompatActivity) { @Provides @ActivityScope @ActivityContext fun provideContext(): Context = activity @Provides @ActivityScope fun provideFragmentManager(): FragmentManager = activity.supportFragmentManager } 

 @ActivityScope @Component(dependencies = arrayOf(ApplicationComponent::class), modules = arrayOf(ActivityModule::class)) interface ActivityComponent { fun inject(activity: MainActivity) } 

Наконец, я создаю новый ActivityComponent в MainActivity и @Inject :

 class MainActivity : AppCompatActivity() { @Inject lateinit var service: ArticleService override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) DaggerActivityComponent.builder() .applicationComponent(Injector.applicationComponent) .activityModule(ActivityModule(this)) .build().inject(this) service.getNewsArticles() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe( { response -> onNext(response) }, { error -> onError(error) }) } // ... } 

Но когда я пытаюсь построить, я получаю следующую ошибку, хотя я считаю, что provideArticleService() в NetworkModule аннотируется правильно:

ArticleService не может быть предоставлен без метода @ Provides- или @ Produces-annotated.

Вам не хватает методов предоставления, чтобы наследовать компонент, охваченный активностью. Либо используйте подкомпоненты вместо зависимости от компонента, либо определите методы предоставления в своем прикладном компоненте.

  @ApplicationScope @Component(modules = arrayOf(ContextModule::class, RealmModule::class, NetworkModule::class)) interface ApplicationComponent { ArticleService articleService(); } 
Intereting Posts
Ошибка вывода типа: RecyclerViewActions.scrollTo () Как я могу объявить аргумент в Kotlin, который принимает (только) перечисления Все еще получение исключения IllegalStateException при использовании API People от Google, несмотря на подписку на другой поток с использованием RxJava Как использовать инъекцию зависимостей с помощью Kotlin для таргетинга JavaScript? IntelliJ IDEA Не удалось найти org.jetbrains.kotlin: kotlin-gradle-plugins многие списки и каждый из них содержит разные объекты в Котлине Одинаковая конечная точка отдыха с различными PathVariable Как переопределить метод при создании объекта в Котлине? Позиция метки `@` в Котлине, обозначая приемник с `this` @Autowired lateinit property '' не был инициализирован Познакомиться с достопримечательностями в Котлин Как создать запрос hql с левым соединением, используя поле из расширяющегося объекта Внедрение onItemClickLitsner в recyclerView Kotlin -android Kotlin val различие getter override vs assign Kotlin Android Button.onClickListener вызывает NoSuchMethodError