1

私はこのようなことをしようとしました:

@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;
}
.........
}

結果はすべてのインスタンスに対してnullです..私はこの方法がうまくいくと思っていました...

たとえば、このようなことができることを知っています

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

injector.getAAA()
and so on..

最初に試した方法がうまくいかないのはなぜですか? 助言がありますか?

ありがとう

4

2 に答える 2

7

Guiceの機能を使用できinjectMembersます。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 インスタンスが 1 つしかありません。

于 2011-06-28T08:58:38.987 に答える
3

GIN は GWT に依存しているため、GIN は GWT を認識していますが、GWT は GIN を認識していません。

したがって、経由でクラスを初期化するGWT.create(AAA.class)と、GIN を使用せずに通常の GWT の方法で AAA が初期化されます。つまり、依存性注入はありません。

依存性注入を行うには、インジェクターを使用して GIN を介してクラスを初期化する必要があります (上記のとおり)。

于 2011-06-27T15:59:15.667 に答える