Search code examples
androiddagger-2android-mvp

How can inject Model to Presenter when create it wit dagger2?


I try create MVP + dagger2

I create Model moudule:

@Module
class ModelsModule {

    @Provides
    BasketModel provideBasketModel() {
        return new BasketModel();
    }

    @Provides
    ProductModel provideProductModel() {
        return new ProductModel();
    }
}

and I need create Presenters. My presenter must use model

Presenters:

public class ProductPresenter {

    private ProductModel;

    public ProductPresenter(ProductModel productModel) {
        this.productModel = productModel;
    }

   publict void test(){
      productModel.someMethod();
     }

And I can not set ProductModel when create Presenter. Presenter I create like this:

@Module
public class PresentersModule {

    @Provides
    ProductPresenter provideProductPresenter() {
        return new ProductPresenter();//What I need set to constructor? new ProductModel()?
    }

Solution

  • Since you are passing ProductModel in your presenter class you also need to tell your PresenterModule how to construct your presenter :

    @Module
    public class PresentersModule {
    
    @Provides
    ProductPresenter provideProductPresenter(ProductModel model) {
        return new ProductPresenter(model);
        }
    }
    

    Dagger is clever enough to find out that you have already build your model instance in another @Module class.

    I think you also need to annotate your Presenter's constructor with @Inject like :

    @Inject
    public ProductPresenter(ProductModel productModel) {
        this.productModel = productModel;
    }
    

    EDIT : And obviously you need a @Component interface. You haven't post any related code but I assume you have one.