Введите класс точки входа в GWT с GIN - PullRequest
1 голос
/ 27 июня 2011

Я пытался сделать что-то вроде этого:

@Singleton
public class AAA implements EntryPoint, HistoryListener
{

private BBB bbb;
private CCC ccc;
private DDD ddd;
private EEE eee;

@Inject
public AAA(BBB bbb, CCC ccc, DDD ddd, EEE eee)
{
  this.bbb = bbb;
  this.ccc = ccc;
  this.ddd = ddd;
  this.eee = ee;
}
.........
}

Результат равен нулю для всех случаев .. Я ожидал, что этот способ сработает ...

Я знаю, что могсделать что-то подобное, например,

private final MyGinjector injector = GWT.create(MyGinjector.class);

injector.getAAA()
and so on..

Почему первый способ, который я попробовал, не работает для меня?Есть предложения?

Спасибо

Ответы [ 2 ]

7 голосов
/ 28 июня 2011

Вы можете использовать функцию injectMembers в Guice, которая в GIN выполняется путем объявления метода в вашем Ginjector, который принимает один аргумент.

@GinModules(...)
interface MyGinjector extends Ginjector {

   public void injectEntryPoint(AAA entryPoint);

   ...
}

public class AAA implements EntryPoint {
   @Inject private BBB bbb; // field injection works
   private CCC ccc;

   @Inject void setCcc(CCC ccc) { this.ccc = ccc; } // and of course method injection

   public onModuleLoad() {
      MyGinjector injector = GWT.create(MyGinjector.class);
      injector.injectEntryPoint(this);
      ...
   }
}

Кстати, вам не нужно аннотировать вашу EntryPoint с помощью @Singleton: если вы не внедрили его в другой класс (и вам пришлось бы прибегать к хаки, чтобы связать его с экземпляром, созданным GWT, и не иметь GIN создать свой собственный), в вашем приложении будет только один экземпляр EntryPoint.

3 голосов
/ 27 июня 2011

GIN зависит от GWT, поэтому GIN знает о GWT, но GWT не знает о GIN.

Таким образом, инициализация ваших классов с помощью GWT.create(AAA.class) будет инициализировать AAA обычным способом GWT, без GIN, что означаетбез внедрения зависимостей.

Для внедрения зависимостей вам нужно инициализировать ваши классы через GIN, используя инжектор (как вы отметили выше).

...