Кинжал 2 инъекции базового класса

В Dagger 1 у меня была настройка базового класса, чтобы он мог обрабатывать создание графа области действия и вставлять зависимости в текущий объект. Например...

public abstract class MyBaseActivity extends Activity {
  private ObjectGraph graph;

  protected void onCreate(Bundle savedInstanceState) {
    graph = ((MyApp) getApplication()).plus(getModules());
    graph.inject(this);
  }

  protected Object[] getModules();
}

public class MyClass extends MyBaseActivity {

  @Inject SomeDep someDep;

  @Override
  protected Object[] getModules() {
    return new Object[/* Contains a module that provides SomeDep */];
  }
}

Это позволило каждому подклассу дополнить свой собственный набор модулей в дополнение к стандартному прикладному модулю.

После игры с Dagger 2 кажется невозможным справиться с подобным сценарием ...

public abstract class MyBaseActivity extends Activity {
  private MyBaseActivityComponent component;

  protected void onCreate(Bundle savedInstanceState) {
    component = ((MyApp) getApplication()).component().plus(/* Can not accept an array */);
    component.inject(this);
  }
}

Я обошел все вышеизложенное, изменив MyBaseActivityComponent так, чтобы в нем были перечислены все возможные модули, которые он может использовать ...

@Subcomponent(modules = {
  Module1.class,
  Module2.class
})
public interface MyBaseActivityComponent {
  public void inject(MyBaseActivity activity);
}

Так что теперь я могу сделать что-то вроде этого ...

public abstract class MyBaseActivity extends Activity {
  private MyBaseActivityComponent component;

  protected void onCreate(Bundle savedInstanceState) {
    component = ((MyApp) getApplication()).component().plus(new Module1(), new Module2());
    component.inject(this);
  }
}

Но теперь у меня есть проблема, когда инъекция будет вводить зависимости для MyBaseActivity, но не для его подклассов. Предложения?

Ответы на вопрос(1)

Ваш ответ на вопрос