没有@Provides注释的方法将无法提供--Confusedddd

时间:2018-06-25 12:39:34

标签: dependency-injection

Error:(39, 10) error: [Dagger/MissingBinding] kz.production.kuanysh.sellings.ui.content_owner.fragments.order.orders.OrdersFragmentPresenter cannot be provided without an @Provides-annotated method.
kz.production.kuanysh.sellings.ui.content_owner.fragments.order.orders.OrdersFragmentPresenter is injected at
kz.production.kuanysh.sellings.ui.content_owner.fragments.order.orders.OrdersFragment.mPresenter
kz.production.kuanysh.sellings.ui.content_owner.fragments.order.orders.OrdersFragment is injected at
kz.production.kuanysh.sellings.di.component.ActivityComponent.inject(kz.production.kuanysh.sellings.ui.content_owner.fragments.order.orders.OrdersFragment)

组件:

@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = 
ActivityModule.class)
public interface ActivityComponent {

   void inject(MainActivity activity);

   void inject(LoginActivity activity);

   void inject(OwnerSupplierItemFragment ownerSupplierItemFragment);

   void inject(OrdersFragment ordersFragment);

}

在模块类中:

@Module
public class ActivityModule {

    private AppCompatActivity mActivity;

    public ActivityModule(AppCompatActivity activity) {
        this.mActivity = activity;
    }

    @Provides
    @ActivityContext
    Context provideContext() {
        return mActivity;
    }

    @Provides
    AppCompatActivity provideActivity() {
        return mActivity;
    }

    @Provides
    CompositeDisposable provideCompositeDisposable() {
        return new CompositeDisposable();
    }

    @Provides
    SchedulerProvider provideSchedulerProvider() {
        return new AppSchedulerProvider();
    }


    @Provides
    @PerActivity
    LoginMvpPresenter<LoginMvpView> provideLoginPresenter(
                    LoginPresenter<LoginMvpView> presenter) {
        return presenter;
    }

    @Provides
    @PerActivity
    MainMvpPresenter<MainMvpView> provideMainPresenter(
            MainPresenter<MainMvpView> presenter) {
        return presenter;
    }


    /*@Provides
    OrdersFragmentMvpPresenter<OrdersFragmentMvpView> provideOrdersFragmentPresenter(
            OrdersFragmentPresenter<OrdersFragmentMvpView> presenter) {
        return presenter;
    }*/

    @Provides
    @PerActivity
    OrdersFragmentMvpPresenter<OrdersFragmentMvpView> provideOrdersFragmentPresenter(
            OrdersFragmentPresenter<OrdersFragmentMvpView> presenter){
        return presenter;
    }

    @Provides
    @PerActivity
    OwnerSupplierItemMvpPresenter<OwnerSupplierItemMvpView> provideOwnerSupplierItemPresenter(
            OwnerSupplierItemPresenter<OwnerSupplierItemMvpView> presenter) {
        return presenter;
    }


    @Provides
    LinearLayoutManager provideLinearLayoutManager(AppCompatActivity activity) {
        return new LinearLayoutManager(activity);
    }
}

我的主持人

public class OrdersFragmentPresenter<V extends OrdersFragmentMvpView> extends 
    BasePresenter<V>
        implements OrdersFragmentMvpPresenter<V> {

    @Inject
    public OrdersFragmentPresenter(DataManager dataManager, SchedulerProvider schedulerProvider, CompositeDisposable compositeDisposable) {
        super(dataManager, schedulerProvider, compositeDisposable);
    }

    @Override
    public void onViewPrepared() {
        //getMvpView().updateOrders();
    }

    @Override
    public void onDetailClick(int position) {
        getMvpView().openOrderDetailFragment();
    }
}

1 个答案:

答案 0 :(得分:0)

所以问题在于您正在使用

  

OrdersFragmentPresenter

但是您永远不会提供它,因此匕首将不知道如何获取此实例。

 @Provides
    OrdersFragmentMvpPresenter<OrdersFragmentMvpView> provideOrdersFragmentPresenter(
            OrdersFragmentPresenter<OrdersFragmentMvpView> presenter) {
        return presenter;
    }

所以您需要添加

@Provides
        OrdersFragmentPresenter<OrdersFragmentMvpView> provideOrdersFragmentPresenter(
                ) {
            return new OrdersFragmentPresenter(); //something like this;
        }

此外,您应该小心使用模块中的自定义范围。优良作法是,每个模块应仅提供一个作用域的元素。