@Binds方法必须只有一个参数,其类型可分配给返回类型

Moh*_*ANE 4 java android dagger dagger-2

我正在迁移到新的匕首android 2.11

所有设置都基于Google蓝图:MVP-Dagger.但我遇到此错误:

错误:(22,57)错误:@Binds方法必须只有一个参数,其类型可分配给返回类型

在这一行:

   @ActivityScoped
    @Binds abstract PresenterFactory<MainContract.Presenter> providePresenterFactory(MainPresenter presenter);
Run Code Online (Sandbox Code Playgroud)

主持人:

@ActivityScoped
public class MainPresenter extends BasePresenterImpl<MainContract.View>
    implements MainContract.Presenter { public MainPresenter(String s) {..
} ... }
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?谢谢.

Dav*_*son 12

错误消息解释了所有内容:

@Binds方法必须只有一个参数,其类型可分配给返回类型

您的@Binds方法的参数为MainPresenter.这不能分配给返回类型PresenterFactory<MainContract.Presenter>.换句话说,MainPresenter不是一个实例PresenterFactory<MainContract.Presenter>.

@Binds方法的正确语法如下:

@Binds
abstract Abstraction bindAbstration(Concretion concretion)
Run Code Online (Sandbox Code Playgroud)

在哪里concretion是一个实例Abstraction.

或者,在Kotlin:

@Binds
abstract fun bindAbstraction(concretion: Concretion) : Abstraction
Run Code Online (Sandbox Code Playgroud)

@Binds方法不是魔法.它们绑定一个类型(例如,一个接口)和Dagger已经知道如何提供的那种类型的实现.

更新

您可以使用以下步骤转换@Provides@Binds:

  1. 确保MainPresenter有一个带有注释的显式构造函数,@Inject并且Dagger 2可以在构造函数中提供依赖项.
  2. 写:

    @Binds
    abstract MainContract.Presenter bindPresenter(MainPresenter mainPresenter);
    
    Run Code Online (Sandbox Code Playgroud)