powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Guice_binding_toProvicer
5 сообщений из 5, страница 1 из 1
Guice_binding_toProvicer
    #37781744
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ;)
Допустим, есть интерфейс:
Код: java
1.
ServiceI


и есть две его реализации:
Код: java
1.
2.
Service1 implements ServiceI
Service2 implements ServiceI



В guice я их bind`ил как-то так:
Код: java
1.
2.
bind(ServiceI.class).annotatedWith("1").to(Serivce1.class);
bind(ServiceI.class).annotatedWith("2").to(Serivce2.class);



И соответственно inject`ил их к конструкторе:
Код: java
1.
2.
3.
4.
5.
6.
public class Test {
     @Inject
     public Test(@Named("1") ServiceI service1, @Named("2") ServiceI service2) {

     }
}



Так как больная голова рукам покоя не дает, а Сервисы не синглтоны, захотелось мне заинджектить не сами сервисы, а провайдер.
Но я, честно сказать, просто не знаю, как создать провайдер для вот такой ситуации, чтобы он возвращал тот инстанс той реализации, которой мне надо?
...
Рейтинг: 0 / 0
Guice_binding_toProvicer
    #37781750
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть хочется что то типа такого на выходе иметь:

Код: java
1.
2.
3.
4.
5.
public class ServiceProvider {
     <T extends ServiceI> T get() {
          return provider.get();
     }
}
...
Рейтинг: 0 / 0
Guice_binding_toProvicer
    #37781875
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

А зачем скрывать сервисы в провайдер, если при их использовании всеравно явно известно, какой именно сервис нужен? В провайдере есть смысл когда решение, что вернуть, должен принимать провайдер.
...
Рейтинг: 0 / 0
Guice_binding_toProvicer
    #37781876
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
bind(ServiceI.class).annotatedWith("1").toProvider(Serivce1Provide.class);
bind(ServiceI.class).annotatedWith("2").toProvider(Serivce2Provide.class);

public class Service1(2)Provider implements Provider<ServiceI>{
     ServiceI get() {
          return new Serivce1(2)Provider();
     }
}
...
Рейтинг: 0 / 0
Guice_binding_toProvicer
    #37781890
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FDОзверин,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
bind(ServiceI.class).annotatedWith("1").toProvider(Serivce1Provide.class);
bind(ServiceI.class).annotatedWith("2").toProvider(Serivce2Provide.class);

public class Service1(2)Provider implements Provider<ServiceI>{
     ServiceI get() {
          return new Serivce1(2)Provider();
     }
}



Сделал нечто типа такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
interface ServiceFactoryI {
    @Named("1") ServiceI getService1();
    @Named("2") ServiceI getService2();
}

class SerivceFactory implements ServiceFactoryI {
      private final Provider<Service1> service1Provider;
      private final Provider<Service2> service2Provider;

     @Inject
     public SerivceFactory(Provider<Service1> service1Provider, Provider<Service2> service2Provider) {
           this.service1Provider = service1Provider;
           this.service2Provider = service2Provider;
     } 

     ServiceI getService1() {
             return service1Provider.get();
     }

     Service2 getService2() {
             return service2Provider.get();
     }

}
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Guice_binding_toProvicer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]