Кинжал 2 Не вводится в зависимый модуль
Я проверил все вопросы, но не нашел никакой подсказки. Я разделил мою проблему до простейшего кода:
Ситуация: хочу иметь:
CatComponent catComponent = DaggerCatComponent.builder()
.kameModule(new KameModule(MainActivity.this))
.build();
catComponent.getCatAnalyzer().analyze();
Я создал компонент:
@Component(modules = {KameModule.class, CatAnalyzerModule.class})
public interface CatComponent {
CatAnalyzer getCatAnalyzer();
}
И модули:
@Module
public class KameModule {
private Context context;
public KameModule(Context context) {
this.context = context;
}
@Provides
KameCat provideKameCat() {
return new KameCat(context );
}
}
@Module(includes = KameModule.class)
public class CatAnalyzerModule {
@Inject
KameCat cat;
@Provides
CatAnalyzer provideCatAnalyzer() {
return new CatAnalyzer(cat);
}
}
И занятия:
public class KameCat {
Context context;
public KameCat(Context context) {
this.context = context;
}
public void doCatStuff() {
Toast.makeText(context, "Poo and Meow", Toast.LENGTH_LONG).show();
}
}
public class CatAnalyzer {
@Inject
KameCat cat;
@Inject
public CatAnalyzer(KameCat cat) {
this.cat = cat;
}
void analyze() {
cat.doCatStuff();
}
}
Когда я получаю свой объект CatAnalyzer из CatComponent, он имеет cat
поле обнулено. Я понятия не имею, почему Кинжал не будет вводить это. Не могли бы вы как-нибудь наставить меня?
1 ответ
Правильный код:
@Module(includes = KameModule.class)
public class CatAnalyzerModule {
@Inject //remove this
KameCat cat;// remove this
@Provides
// Add cat as a argument and let KameModule provide it..
CatAnalyzer provideCatAnalyzer(KameCat cat) {
return new CatAnalyzer(cat);
}
}
Спасибо: https://www.future-processing.pl/blog/dependency-injection-with-dagger-2/