Компоненты Dagger с несколькими сервисами - PullRequest
0 голосов
/ 20 сентября 2019

Мне нужно реализовать сервисы, как в 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);
    }
}

Это всего лишь два сервиса, образующие циклы внутри себя при создании модулей.Рассмотрим систему, имеющую несколько служб одинаковым образом.Я не уверен, как идти об этом.Весной это легко реализовать, но я не могу использовать его из-за определенных ограничений.Пожалуйста, помогите.

Заранее спасибо.

...