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
Post a Comment