Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You can do DI using Context interfaces. It is not hard, and fairly straight forward.</p> <p>A Context interface is a class that exposes all the bindings from the guice module configuration. </p> <p>This is an example of this where I'm assuming that AppPresenter+DashboardPresenter is in one package and needs one "context", while GadgetPresenter and GadgetConfigPresenter is in another package and needs another "context". The number of contexts, and how to handle them is entirely up to the user.</p> <pre><code>/** * The dependencies that need to be injected for package1 */ public interface SomePackageContext { GadgetPresenter getGadgetPresenter(); GadgetConfigPresenter getGadgetConfigPresenter(); } /** * The dependencies that need to be injected for package2 */ public interface OtherPackageContext { // These methods can take arguments.. AppPresenter getAppPresenter(Args..); DashboardPresenter getDashboardPresenter(Args..); } /** * All of the DI needed in our project. * * &lt;p&gt;We don't need the two interfaces above, we can put * everything in this interface if we have a small * project where layering is not a big issue. */ public interface PresenterContext extends SomePackageContext, OtherPackageContext { } public class MockPresenterContext implements PresenterContext { ... } public class RealPresenterContext implements PresenterContext { // This is similar to bind(...) in guice public AppPresenter getAppPresenter(Args..) { return new AppPresenter(this, otherargs...); } public DashboardPresenter getDashboardPresenter(Args..) { return new DashboardPresenter(this, otherargs...); } public GadgetPresenter getGadgetPresenter() { return new GadgetPresenter(this); } public GadgetConfigPresenter getGadgetConfigPresenter() { return new GadgetConfigPresenter(); } } public class DashboardPresenter { // @Inject private final GadgetPresenter gadgetPresenter; /* * We inject everything using the SomePackageContext. */ public DashboardPresenter(SomePackageContext ctxt) { this.gadgetPresenter = ctxt.getGadgetPresenter(); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload