Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
贡献Android喷油器不喷射模块_Android_Dagger 2_Dagger - Fatal编程技术网

贡献Android喷油器不喷射模块

贡献Android喷油器不喷射模块,android,dagger-2,dagger,Android,Dagger 2,Dagger,我一直在尝试dagger2的基本实现,但由于某些原因,ContributsAndroidInjector没有注入定义的模块。当我运行应用程序时,出现以下错误 错误 error: [Dagger/MissingBinding] com.demo.MainPresenter cannot be provided without an @Inject constructor or an @Provides-annotated method. public abstract interface AppC

我一直在尝试dagger2的基本实现,但由于某些原因,ContributsAndroidInjector没有注入定义的模块。当我运行应用程序时,出现以下错误

错误

error: [Dagger/MissingBinding] com.demo.MainPresenter cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface AppComponent {
                ^
  A binding with matching key exists in component: com.demo.di.MainActivityModule_ProvidesMainActivity.MainActivitySubcomponent
      com.demo.MainPresenter is injected at
          com.demo.MainActivity.presenter
      com.demo.MainActivity is injected at
          com.demo.di.AppComponent.inject(com.demo.MainActivity)

下面是我的匕首代码

@Component(modules = [
    AndroidInjectionModule::class,
    MainActivityModule::class
])
interface AppComponent {
    fun inject(application: MyApplication)

    fun inject(mainActivity: MainActivity)
}

@Module
abstract class MainActivityModule {

    @ContributesAndroidInjector(modules = [MainModule::class)
    abstract fun providesMainActivity(): MainActivity
}

@Module
class MainModule {

    @Provides
    fun providesMainPresenter(): MainPresenter {
        return MainPresenter()
    }
}
我正在初始化MyApplication中的AppComponent,MainPresenter被注入MainActivity

class MyApplication : Application(), HasActivityInjector {

    @Inject
    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()
        DaggerAppComponent.create()
                .inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> {
        return dispatchingAndroidInjector
    }

}

class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var presenter: MainPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnLaunch.setOnClickListener { presenter.onLaunchClicked() }
    }
}
类MyApplication:Application(),HasActivityInjector{
@注入
lateinit var分派AndroidInjector:分派AndroidInjector
重写fun onCreate(){
super.onCreate()
DaggerAppComponent.create()
.注入(这个)
}
覆盖乐趣活动Injector():AndroidInjector{
回程调度和回程调度
}
}
类MainActivity:AppCompatActivity(){
@注入
lateinit变量演示者:MainPresenter
重写创建时的乐趣(savedInstanceState:Bundle?){
雄激素注射。注射(这个)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnLaunch.setOnClickListener{presenter.onLaunchClicked()}
}
}

我在网上浏览了多个例子,但没有一个是有用的。还有其他人遇到过这个问题吗?

您必须从
应用组件中删除
乐趣注入(mainActivity:mainActivity)

当您正确地将
main模块
和演示者添加到活动子组件(ContributesAndroidInjector
内容)时,您的AppComponent对此一无所知。如果没有缺少依赖项,则无法从那里注入MainActivity,因此会出现错误。有关错误的一般信息以及如何读取错误,请参阅


作为旁注,您应该使用Dagger查找构造函数注入,以避免编写带有模块的样板文件。

您必须从
应用组件中删除
有趣的注入(mainActivity:mainActivity)

当您正确地将
main模块
和演示者添加到活动子组件(ContributesAndroidInjector
内容)时,您的AppComponent对此一无所知。如果没有缺少依赖项,则无法从那里注入MainActivity,因此会出现错误。有关错误的一般信息以及如何读取错误,请参阅


作为补充说明,您应该使用Dagger查找构造函数注入,以避免编写包含模块的样板文件。

谢谢!这真的帮助我理解了如何阅读匕首错误和浏览图表。谢谢!这真的帮助我理解了如何阅读匕首错误和浏览图表。