Injection and inheritance - Google Groups



Injection and inheritance - Google Groups

I'm trying to find the best way to inject into an inheritance hierarchy.

The base class takes one "live" parameter ("name", not injectable) and a bunch of injected dependencies, "dep1", "dep2", etc. The most obvious solution is to use assisted injection:

public class Base {
  private Dep1 dep1;
  private String name;

  protected Base(String name, Dep1 dep1) {
    this.name = name;
    this.dep1 = dep1;
  }
}

public class A extends Base {
  public interface IFactory {
    A create(@Assisted("name") String name);
  }

  @Inject
  private A(String name, Dep1 dep1) {
    super(name, dep1);
  }
}

Two things bother me with this approach:
  1. It's a lot of boiler plate. Each new subclass needs to create its own factory, its own constructor with all the dependencies, call super with all these dependencies and add itself to the FactoryModuleBuilder.

  2. If I add a new dependency in the base class, I need to modify all the subclasses (add a parameter to their constructor and to their super() call).
I considered passing the injector as the sole dependency to the base class and let the base class do its own look ups:

public class Base {
  private Dep1 dep1;
  private String name;

  protected Base(String name, Injector inj) {
    this.name = name;
    this.dep1 = inj.getInstance(Dep1.class);
  }
}

public class A extends Base {
  public interface IFactory {
    A create(@Assisted("name") String name);
  }

  @Inject
  public A(String name, Injector inj) {
    super(name, inj);
  }

This addresses point 2: when a new dependency is added to the base class, only the base class needs to be modified, but it's still awkward to do these look ups manually (and injectMembers() doesn't work since we're in the constructor).

This still doesn't address point 1: there's still a lot of boiler plate involved for each subclass.

Is there a better way?

If not, can we discuss this as a potential new feature?

Read full article from Injection and inheritance - Google Groups


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts