Хорошо, прежде всего, вам нужен модуль:
@Module
class SomeModule{
@SomeScope
@Provides
A proivdeTheAInstance(){
return new A();
}
}
Тогда ваш компонент:
@SomeScope
@Component(modules = {A.class}, dependencies={HigherLowerDependencyComponent.class})
interface SomeComponent{
void inject(MainActivity activity);
}
После этого в вашей деятельности, после того, как вы выполнили сборку, в onCreate
DaggerSomeComponent.builder().higherLowerDependencnyComponent(implementationHere).build().inject(this)
Чем вы можете @Inject A
Но есть одна проблема. Внедрение в конструктор не работает так. Чтобы выполнить внедрение конструктора, ваш конструктор A()
должен иметь хотя бы одну зависимость. Аннотация @Inject
к этому конструктору вызывает не A()
, а его зависимости, которые в вашем случае будут равны 0, что делает ненужным @Inject
в вашем конструкторе A()
. Ваш вопрос будет в силе, если ваш A
конструктор будет выглядеть так:
@Inject
public A(SomeDependency dependency){
this.someDependency = dependency;
}
SomeDependency
будет также предоставлено в модуле:
@Module
class SomeModule{
@SomeScope
@Provides
A proivdeTheAInstance(SomeDependency someDependency){ //now dagger will look to find this one
return new A();
}
@SomeScope
@Provides
SomeDependency proivdeSomeDependencyInstance(){ //which is provided here
return new SomeDependency();
}
}
И тебе хорошо идти, как было:
class A{
private SomeDependency someDependency;
@Inject
public A(SomeDependency someDependency){ //the inject will require the SomeDependency
this.someDependency = someDependency;
}
}
EDIT:
Если кинжал уже знает, как предоставить экземпляр, модуль не нужен, вы можете просто выполнить @Inject
над конструктором класса A()
:
class A{
@Inject
public A(){
}
}