Мне нужно реализовать сервисы, как в Spring, используя Dagger, но я не могу этого сделать.Рассмотрим следующий пример.
Это одна из служб
public class Service1 {
private final Repository1 repo1;
@Inject
public Service1(Repository1 repo1) {
this.repo1 = repo1;
}
// implementation
}
Модуль для этой службы имеет вид:
@Module
public class Service1Module {
@Provides
Repository1 provideRepository1(){
return Repository1Impl.getInstance();
}
@Provides
Service1 provideService1(){
return new Service1Impl(this.provideRepository1());
}
}
Компонент будет легко создан для этого модуля и будетиспользуемый.Просто и легко.
Теперь рассмотрим другой класс
public class Service2 {
private final Repository2 repo2;
private final Service1 service1;
@Inject
public Service2(Repository2 repo2, Service1 service1) {
this.repo2 = repo2;
this.service1 = service1;
}
// implementation
}
И мы изменим исходный класс на
public class Service1 {
private final Repository1 repo1;
private final Service2 service2;
@Inject
public Service1(Repository1 repo1, Service2 service2) {
this.repo1 = repo1;
this.service2 = service2;
}
// implementation
}
Теперь проблема в том, что я не могу создатьправильный модуль с таким подходом.
Еще раз рассмотрим класс модуля
@Module
public class Service1Module {
@Provides
Repository1 provideRepository1(){
return Repository1Impl.getInstance();
}
@Provides
Repository2 provideRepository2(){
return Repository2Impl.getInstance();
}
@Provides
Service1 provideService1(){
return new Service1Impl(
this.provideRepository1(),
new Service2Impl(this.provideRepository2(), //this param
// needs service 1 which again needs service 2 and would
// be a loop);
}
}
Это всего лишь два сервиса, образующие циклы внутри себя при создании модулей.Рассмотрим систему, имеющую несколько служб одинаковым образом.Я не уверен, как идти об этом.Весной это легко реализовать, но я не могу использовать его из-за определенных ограничений.Пожалуйста, помогите.
Заранее спасибо.