匕首与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
你的项目