Ошибка определения области действия В Dagger ActivityScoped может не ссылаться на привязки с различными областями действия - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть Activity с разными фрагментами, каждый фрагмент имеет свой собственный ViewModel, Presenter, Etc .... поэтому я пытаюсь сделать так, чтобы ViewModel, Presenter, Etc .... были включены в область видимости фрагмента и чтобы охватить фрагмент в области действия хостинга, но я не мог найти способ сделать эту работу, на самом деле я обнаружил, но были утечки памяти, поэтому я думаю, что это не правильный путь.

Журнал ошибок компиляции:

error: [Dagger/IncompatiblyScopedBindings] net.econcepts.di.modules.ActivityBindingModule_DashboardActivity.DashboardSubcomponent scoped with @net.econcepts.di.annotations.ActivityScoped may not reference bindings with different scopes:
@net.econcepts.di.annotations.FragmentScoped class net.econcepts.thawbi.cart.FragmentCart
@net.econcepts.di.annotations.FragmentScoped class net.econcepts.thawbi.cart.ViewModelCart
@net.econcepts.di.annotations.FragmentScoped class net.econcepts.thawbi.cart.adapter.AdapterCart
@net.econcepts.di.annotations.FragmentScoped @Binds net.econcepts.thawbi.cart.ContractCart.Presenter net.econcepts.di.submodules.CartSubModules.providesCartPresenter(net.econcepts.thawbi.cart.PresenterCart)
@net.econcepts.di.annotations.FragmentScoped class net.econcepts.thawbi.cart.PresenterCart [net.econcepts.di.component.AppComponent → net.econcepts.di.modules.ActivityBindingModule_DashboardActivity.DashboardSubcomponent]

Инъекции зависимости:

AppComponent.java:

@Singleton
@Component(modules = {
        BundleModule.class,
        ViewModelModule.class,
        ApplicationModule.class,
        ActivityBindingModule.class,
        AndroidSupportInjectionModule.class})
public interface AppComponent  extends AndroidInjector<BaseApplication> {


    @Component.Builder
    interface Builder{

        @BindsInstance
        AppComponent.Builder application(Application application);

        AppComponent build();
    }
}

ActivityBindingModule.java:

@Module
public abstract class ActivityBindingModule {

    @ActivityScoped
    @ContributesAndroidInjector(modules = {LoginSubModules.class})
    abstract LoginActivity loginActivity();


    @ActivityScoped
    @ContributesAndroidInjector(modules = {CartSubModules.class})
    abstract Dashboard dashboardActivity();
}

CartSubModules.java:

@Module
public abstract class CartSubModules {

    @FragmentScoped
    @ContributesAndroidInjector()
    abstract FragmentCart fragmentLogin();

    @FragmentScoped
    @Binds
    abstract ContractCart.Presenter
    providesCartPresenter(PresenterCart presenterCart);
}

и

FragmentCart.java (Заголовок):

@FragmentScoped
public class FragmentCart extends BaseFragment implements ContractCart.View 

AdapterCart.java

@FragmentScoped
public class AdapterCart extends RecyclerView.Adapter<AdapterCart.ViewHolder>

и т. Д. (ViewModel и Presenter также помечены FragmentScoped.

...