新しい短剣に移行していますAndroid 2.11
すべてGoogleの青写真に基づいて設定されています:MVP-Dagger。しかし、このエラーが発生しています:
エラー:(22、57)エラー:@Bindsメソッドには、戻り値の型に割り当て可能な型のパラメーターを1つだけ含める必要があります
ここでこの行:
@ActivityScoped
@Binds abstract PresenterFactory<MainContract.Presenter> providePresenterFactory(MainPresenter presenter);
プレゼンター:
@ActivityScoped
public class MainPresenter extends BasePresenterImpl<MainContract.View>
implements MainContract.Presenter { public MainPresenter(String s) {..
} ... }
誰かがこれを解決する方法について何か考えがありますか?ありがとう。
エラーメッセージはすべてを説明しています:
@Bindsメソッドには、戻り値の型に割り当て可能な型のパラメーターを1つだけ含める必要があります
@Binds
メソッドのパラメーターはMainPresenter
です。これは、戻り値の型PresenterFactory<MainContract.Presenter>
に割り当てることはできません。つまり、MainPresenter
はPresenterFactory<MainContract.Presenter>
のインスタンスではありません。
@Binds
メソッドの正しい構文は次のようになります。
@Binds
abstract Abstraction bindAbstration(Concretion concretion)
ここで、concretion
はAbstraction
のインスタンスです。
または、Kotlinでは:
@Binds
abstract fun bindAbstraction(concretion: Concretion) : Abstraction
@Binds
メソッドは魔法ではありません。それらはタイプ(たとえば、インターフェース)とそのタイプの実装をバインドしますDaggerが提供する方法を知っているすでに。
更新
次の手順で、@Provides
を@Binds
に変換できます。
MainPresenter
に@Inject
アノテーションが付けられた明示的なコンストラクターがあり、Dagger2がコンストラクターに依存関係を提供できることを確認してください。書く:
@Binds
abstract MainContract.Presenter bindPresenter(MainPresenter mainPresenter);
同じ例外がありましたが、状況が異なりました。
例外は私にとって誤解を招くものでした。追加後
_kapt {
correctErrorTypes true
}
_
to _build.gradle
_本当の問題を見つけました:
_error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was
unable to process this class because not all of its dependencies could be resolved.
Check for compilation errors or a circular dependency with generated code.
_
ヒント_not all of its dependencies could be resolved
_は、DI関連のものを処理するapp
モジュールの_build.gradle
_にimplementation project(path: ':repository')
を追加し忘れたことを見つけるのに役立ちました。
これが同じ問題を抱えている他の人に役立つことを願っています。
@Bindsの代わりに@Providesを使用する