java - Dagger2 module: how to obtain context to pass to the constructor of a class I want to provide -


first time using dagger2.

in android application have myapplication class extends application. have imageassistant class collection of related image-processing methods. in myapplicaiton class used instantiate imageassistant activities use.

now trying make work dagger2, dont know how pass context in module provides imageassistant

this how code looked:

public class imageassistant {      context context;      public imageassistant(context context){         this.context = context;     }       // bunch of methods...  }  public class myapplication extends application {      public imageassistant imageassistant;      public void oncreate() {          imageassistant = new imageassistant(this);     }  } 

now, enter dagger 2, here have

public class imageassistant {      context context;      @inject     public imageassistant(context context){         this.context = context;     }       // bunch of methods...  }  public class myapplication extends application {      @inject     public imageassistant imageassistant;      public void oncreate() {       }  } 

in package .modules:

appmodule.java   @module public class appmodule {      @provides     imageassistant provideimageassistant() {         return new imageassistant(); // here context needed. from?     }  } 

edit: how module looks now, still dont know how tie together:

@module public class appmodule {      private myapplication application;      public appmodule(myapplication application) {         this.application = application;     }      @provides     context provideapplicationcontext() {         return this.application;     }      @provides     imageassistant provideimageassistant(imageassistant imageassistant) {         return imageassistant;     }  } 

and appcomponent:

@singleton @component(modules = {appmodule.class}) public interface appcomponent {      imageassistant provideimageassistant();     context context();  } 

your module should this:

@module(injects = {mainactivity.class}) public class appmodule {      private myapplication application;      public appmodule(myapplication application) {         this.application = application;     }      @provides     public imageassistant provideimageassistant() {         return new imageassistantimpl(application); // implementation of imageassistant     }  } 

usage in activity:

public class mainactivity extends activity{  @inject imageassistant imageassistant;  @override protected void oncreate(bundle savedinstancestate) {     sharedobjectgraph.inject(this);     imageassistant.dosomething(); } 

}

don't forget init objectgraph in application class. use sharedobjectgraph static class share objectgraph created appmodule across whole app.

read building graph section.


Comments