Android 安卓的匕首2“;如果没有@Providers注释的方法,则无法提供;
我正在尝试为Android使用Dagger2v2.11的最新版本 这是我的代码:Android 安卓的匕首2“;如果没有@Providers注释的方法,则无法提供;,android,dagger-2,android-mvp,dagger,Android,Dagger 2,Android Mvp,Dagger,我正在尝试为Android使用Dagger2v2.11的最新版本 这是我的代码: AppComponent: @Singleton @Component(modules = { AndroidInjectionModule.class, AppModule.class, ActivityBuildersModule.class, FragmentBuildersModule.class }) public interface App
AppComponent
:
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBuildersModule.class,
FragmentBuildersModule.class
})
public interface AppComponent {
void inject(MyApplication myApplication);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
@ExceptionRequestsQualifier
ExceptionRequestsServices exceptionRequestsServices();
}
AppModule
:
@Module(includes = {ActivityModule.class, FragmentModule.class})
public class AppModule {
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
@ExceptionRequestsQualifier
ExceptionRequestsServices provideExceptionRequests() {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(APIConstants.EXCEPTION_REQUESTS_BASE_URL)
.build()
.create(ExceptionRequestsServices.class);
}
@Singleton
@Provides
NetworkManager provideNetworkManager(Application app) {
return new NetworkManager(app);
}
}
@Module
public abstract class ActivityBuildersModule {
@ActivityScope
@ContributesAndroidInjector
abstract ExceptionRequestsActivity contributeExceptionRequestsActivity();
}
@Module()
public abstract class ActivityModule {
@Provides
@ActivityScope
static ExceptionRequestsMvpPresenter<ExceptionRequestsMvpView> bindExceptionRequestsPresenter(
ExceptionRequestsPresenter<ExceptionRequestsMvpView> presenter) {
return presenter;
}
}
@Module
public abstract class FragmentBuildersModule {
@FragmentScope
@ContributesAndroidInjector
abstract AddApplicantFragment contributeAddApplicantFragment();
@FragmentScope
@ContributesAndroidInjector
abstract PledgeFragment contributePledgeFragment();
}
@Module()
public abstract class FragmentModule {
@Provides
@FragmentScope
static AddApplicantMvpPresenter<AddApplicantMvpView> bindAddApplicantPresenter(
AddApplicantPresenter<AddApplicantMvpView> presenter) {
return presenter;
}
@Provides
@FragmentScope
static PledgeMvpPresenter<PledgeMvpView> bindPledgePresenter(
PledgePresenter<PledgeMvpView> presenter) {
return presenter;
}
}
活动构建器模块
:
@Module(includes = {ActivityModule.class, FragmentModule.class})
public class AppModule {
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
@ExceptionRequestsQualifier
ExceptionRequestsServices provideExceptionRequests() {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(APIConstants.EXCEPTION_REQUESTS_BASE_URL)
.build()
.create(ExceptionRequestsServices.class);
}
@Singleton
@Provides
NetworkManager provideNetworkManager(Application app) {
return new NetworkManager(app);
}
}
@Module
public abstract class ActivityBuildersModule {
@ActivityScope
@ContributesAndroidInjector
abstract ExceptionRequestsActivity contributeExceptionRequestsActivity();
}
@Module()
public abstract class ActivityModule {
@Provides
@ActivityScope
static ExceptionRequestsMvpPresenter<ExceptionRequestsMvpView> bindExceptionRequestsPresenter(
ExceptionRequestsPresenter<ExceptionRequestsMvpView> presenter) {
return presenter;
}
}
@Module
public abstract class FragmentBuildersModule {
@FragmentScope
@ContributesAndroidInjector
abstract AddApplicantFragment contributeAddApplicantFragment();
@FragmentScope
@ContributesAndroidInjector
abstract PledgeFragment contributePledgeFragment();
}
@Module()
public abstract class FragmentModule {
@Provides
@FragmentScope
static AddApplicantMvpPresenter<AddApplicantMvpView> bindAddApplicantPresenter(
AddApplicantPresenter<AddApplicantMvpView> presenter) {
return presenter;
}
@Provides
@FragmentScope
static PledgeMvpPresenter<PledgeMvpView> bindPledgePresenter(
PledgePresenter<PledgeMvpView> presenter) {
return presenter;
}
}
活动模块
:
@Module(includes = {ActivityModule.class, FragmentModule.class})
public class AppModule {
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
@ExceptionRequestsQualifier
ExceptionRequestsServices provideExceptionRequests() {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(APIConstants.EXCEPTION_REQUESTS_BASE_URL)
.build()
.create(ExceptionRequestsServices.class);
}
@Singleton
@Provides
NetworkManager provideNetworkManager(Application app) {
return new NetworkManager(app);
}
}
@Module
public abstract class ActivityBuildersModule {
@ActivityScope
@ContributesAndroidInjector
abstract ExceptionRequestsActivity contributeExceptionRequestsActivity();
}
@Module()
public abstract class ActivityModule {
@Provides
@ActivityScope
static ExceptionRequestsMvpPresenter<ExceptionRequestsMvpView> bindExceptionRequestsPresenter(
ExceptionRequestsPresenter<ExceptionRequestsMvpView> presenter) {
return presenter;
}
}
@Module
public abstract class FragmentBuildersModule {
@FragmentScope
@ContributesAndroidInjector
abstract AddApplicantFragment contributeAddApplicantFragment();
@FragmentScope
@ContributesAndroidInjector
abstract PledgeFragment contributePledgeFragment();
}
@Module()
public abstract class FragmentModule {
@Provides
@FragmentScope
static AddApplicantMvpPresenter<AddApplicantMvpView> bindAddApplicantPresenter(
AddApplicantPresenter<AddApplicantMvpView> presenter) {
return presenter;
}
@Provides
@FragmentScope
static PledgeMvpPresenter<PledgeMvpView> bindPledgePresenter(
PledgePresenter<PledgeMvpView> presenter) {
return presenter;
}
}
碎片模块
:
@Module(includes = {ActivityModule.class, FragmentModule.class})
public class AppModule {
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
@ExceptionRequestsQualifier
ExceptionRequestsServices provideExceptionRequests() {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(APIConstants.EXCEPTION_REQUESTS_BASE_URL)
.build()
.create(ExceptionRequestsServices.class);
}
@Singleton
@Provides
NetworkManager provideNetworkManager(Application app) {
return new NetworkManager(app);
}
}
@Module
public abstract class ActivityBuildersModule {
@ActivityScope
@ContributesAndroidInjector
abstract ExceptionRequestsActivity contributeExceptionRequestsActivity();
}
@Module()
public abstract class ActivityModule {
@Provides
@ActivityScope
static ExceptionRequestsMvpPresenter<ExceptionRequestsMvpView> bindExceptionRequestsPresenter(
ExceptionRequestsPresenter<ExceptionRequestsMvpView> presenter) {
return presenter;
}
}
@Module
public abstract class FragmentBuildersModule {
@FragmentScope
@ContributesAndroidInjector
abstract AddApplicantFragment contributeAddApplicantFragment();
@FragmentScope
@ContributesAndroidInjector
abstract PledgeFragment contributePledgeFragment();
}
@Module()
public abstract class FragmentModule {
@Provides
@FragmentScope
static AddApplicantMvpPresenter<AddApplicantMvpView> bindAddApplicantPresenter(
AddApplicantPresenter<AddApplicantMvpView> presenter) {
return presenter;
}
@Provides
@FragmentScope
static PledgeMvpPresenter<PledgeMvpView> bindPledgePresenter(
PledgePresenter<PledgeMvpView> presenter) {
return presenter;
}
}
添加应用程序MVPPresenter
:
public class AddApplicantPresenter<V extends AddApplicantMvpView> extends BasePresenter<V> implements AddApplicantMvpPresenter<V> {
@Inject
@ExceptionRequestsQualifier
ExceptionRequestsServices mExceptionRequestsServices;
@Inject
NetworkManager mNetworkManager;
@Inject
public AddApplicantPresenter(CompositeDisposable compositeDisposable) {
super(compositeDisposable);
}
}
@FragmentScope
public interface AddApplicantMvpPresenter<V extends AddApplicantMvpView> extends MvpPresenter<V> {
void addApplicant(String name, String qatarId,
String date, String mobile,
ChosenImage chosenImage);
}
碎片范围
:
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface FragmentScope {
}
错误日志
:
Error:(21, 1) error: mypackagename.di.component.AppComponent scoped with @Singleton may not reference bindings with different scopes:
@Provides @mypackagename.di.scope.ActivityScope mypackagename.ui.exceptionrequests.ExceptionRequestsMvpPresenter<mypackagename.ui.exceptionrequests.ExceptionRequestsMvpView> mypackagename.di.module.ActivityModule.bindExceptionRequestsPresenter(mypackagename.ui.exceptionrequests.ExceptionRequestsPresenter<mypackagename.ui.exceptionrequests.ExceptionRequestsMvpView>)
@Provides @mypackagename.di.scope.FragmentScope mypackagename.ui.addapplicant.AddApplicantMvpPresenter<mypackagename.ui.addapplicant.AddApplicantMvpView> mypackagename.di.module.FragmentModule.bindAddApplicantPresenter(mypackagename.ui.addapplicant.AddApplicantPresenter<mypackagename.ui.addapplicant.AddApplicantMvpView>)
@Provides @mypackagename.di.scope.FragmentScope mypackagename.ui.pledge.PledgeMvpPresenter<mypackagename.ui.pledge.PledgeMvpView> mypackagename.di.module.FragmentModule.bindPledgePresenter(mypackagename.ui.pledge.PledgePresenter<mypackagename.ui.pledge.PledgeMvpView>)
Error:(21,1)Error:mypackagename.di.component.AppComponent作用域为@Singleton的不能引用不同作用域的绑定:
@提供@mypackagename.di.scope.ActivityScope mypackagename.ui.exceptionrequests.ExceptionRequestsMVPresenter mypackagename.di.module.ActivityModule.bindExceptionRequestsPresenter(mypackagename.ui.exceptionrequests.ExceptionRequestsPresenter)
@提供@mypackagename.di.scope.FragmentScope mypackagename.ui.addapplicator.addapplicationmvppresenter mypackagename.di.module.FragmentModule.bindaddapplicationpresenter(mypackagename.ui.addapplicator.addapplicationpresenter)
@提供@mypackagename.di.scope.FragmentScope mypackagename.ui.credit.质押EMVPPresenter mypackagename.di.module.FragmentModule.BindQuartePresenter(mypackagename.ui.credit.QuartePresenter)
模块
和组件
不能有不同的范围
您可以让组件
拥有多个作用域
,这可以解决这个问题。
尝试将其移动到不同的组件,并将其作为组件依赖项添加
我希望将来他们能像我在项目中那样解决这个问题。
目前,Dagger2允许模块带有NoScope和单示波器。这应该与您的组件相匹配
拇指规则::不同的作用域有不同的组件。
对于您的应用程序,您需要三个组件,
FragmentComponent
(FragmentScope
):-(理想情况下,这应该是ActivityComponent
)
ApplicationComponent
(Singleton
)
阅读有关作用域的更多信息。您可能的副本仅提供
@ExceptionRequestsQualifier exceptionrequests服务
,但您的组件试图公开exceptionrequests服务
,DavidMedenjak我将@ExceptionRequestsQualifier
添加到ExceptionRequestsServices
中,并更新了我的问题和错误日志。您不能从@Singleton
组件提供@ActivityScope
'd。在AppModule
上查看您的子模块,那么我如何才能做到这一点呢?