В кинжале 1 У меня была установка базового класса, так что она обрабатывала бы создание графа с областью и впрыскивание зависимостей в текущий объект. Например ...Dagger 2 инъекции базового класса
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, но не от подклассов. Предложения?
убедитесь вызвать 'super.onCreate (savedInstanceState);' – EpicPandaForce