Dagger использование Inject
третий день не могу разобраться с даггером, а именно с использованием Inject. UseCase класс:
public class UseCase {
@Inject
Repo repo;
public void getText() {
repo.repoText();
}
}
Repo Класс:
public class Repo {
@Inject
Data data;
public void repoText(){
data.getDataText();
}
}
Data класс:
public class Data {
public void getDataText(){
System.out.println("ДАТА ТЕКСТ");
}
}
Модуль:
@Module
public class AppModule {
@Provides
UseCase useCase(){
return new UseCase();
}
@Provides
Repo repo(){
return new Repo();
}
@Provides
Data providesData(){
return new Data();
}
}
Компонент:
@Component(modules = AppModule.class)
public interface AppComponent {
UseCase getUseCase();
void inject(UseCase useCase);
}
И реализация:
AppComponent appComponent = DaggerAppComponent.create();
UseCase useCase = appComponent.getUseCase();
appComponent.inject(useCase);
useCase.getText();
Проблема в том, что не создается класс Data который реализуется в классе Repo. Что я делаю не так? Заранее спасибо за ответ
Ответы (2 шт):
Автор решения: Shams
→ Ссылка
Проблема в том что dagger не может инжектит data класс в repo, так как вы не прописали inject метод в AppComponent. Лучше передайте data класс в конструктор repo. Тогда проблем не возникнет
public class Repo {
Data data;
public Repo(Data data) {
this.data = data;
}
public void repoText() {
data.getDataText();
}
}
Автор решения: IR42
→ Ссылка
Используйте Inject на конструкторе, а не на поле
public class UseCase {
Repo repo;
@Inject
public UseCase(Repo repo) {
this.repo = repo;
}
public void getText() {
repo.repoText();
}
}
Repo Класс:
public class Repo {
Data data;
@Inject
public Repo(Data data) {
this.data = data;
}
public void repoText(){
data.getDataText();
}
}
Data класс:
public class Data {
@Inject
public Data() {}
public void getDataText(){
System.out.println("ДАТА ТЕКСТ");
}
}
Компонент:
@Component
public interface AppComponent {
UseCase getUseCase();
}
AppComponent appComponent = DaggerAppComponent.create();
UseCase useCase = appComponent.getUseCase();
useCase.getText();