匕首与Kotlin上的Mvp – Android

我是刚刚进​​入Kotlin的Android开发人员,我一直试图在Kotlin上设置Mvp Dagger应用程序,但我无法弄清楚发生了什么事情。 我继续得到这个错误:

Error:dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code. 

这是我的代码:

KotlinApplication:

 class KotlinApplication: MultiDexApplication(), HasActivityInjector { @Inject lateinit var injector: DispatchingAndroidInjector override fun onCreate() { super.onCreate() inject() } override fun activityInjector(): AndroidInjector { return injector } fun inject() { DaggerAppComponent.builder().application(this).build().inject(this); } } 

AppComponent:

 @Singleton @Component(modules = arrayOf(AppModule::class, InjectionModule::class)) interface AppComponent { @Component.Builder interface Builder { @BindsInstance fun application(app: KotlinApplication): Builder fun build(): AppComponent } fun inject(app: KotlinApplication) } 

的AppModule:

 @Module class AppModule { @Singleton @Provides fun provideAppContext(app: KotlinApplication): Context { return app } @Singleton @Provides fun provideApplication(app: KotlinApplication): Application { return app } } 

InjectionModule:

 @Module abstract class InjectionModule { @ActivityScope @ContributesAndroidInjector(modules = arrayOf(MainModule::class)) internal abstract fun bindMainActivity(): MainActivity } 

主要活动:

 class MainActivity : AppCompatActivity(), MainMvp.View { @Inject lateinit var presenter: MainMvp.Presenter override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 

MainMvp:

 interface MainMvp { interface View { } interface Presenter { } } 

MainPresenter:

 class MainPresenter(view: MainMvp.View): MainMvp.Presenter { var view: MainMvp.View init { this.view = view } } 

MainBindModule:

 @Module interface MainBindModule { @ActivityScope @Binds fun bindView(activity: MainActivity): MainMvp.View } 

MainModule:

 @Module(includes = arrayOf(MainBindModule::class)) class MainModule { @ActivityScope @Provides fun providePresenter(view: MainMvp.View): MainMvp.Presenter { return MainPresenter(view) } } 

最后,ActivityScope:

 @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ActivityScope 

有谁知道什么可能是错的? 我之前几次在java中使用过相同的架构模式,而我从来没有遇到过这个错误。

另外,当我注释掉InjectionModule里面的所有东西时,一切正常

我想你必须在你的AppComponent添加AndroidSupportInjectionModule::class

 @Singleton @Component(modules = arrayOf(AppModule::class, AndroidSupportInjectionModule::class, InjectionModule::class)) interface AppComponent { @Component.Builder interface Builder { @BindsInstance fun application(app: KotlinApplication): Builder fun build(): AppComponent } fun inject(app: KotlinApplication) } 

如果它仍然不能尝试引用这个github回购: Kotlin MVP聊天 。 检出包含kotlin中所有dependency injection代码的di文件夹。

参考官方Dagger2问题页面

它说:

这是一个问题,不是匕首问题。

尝试clean/re-build你的项目