0

私のGinが注入されたGWTアプリケーションは、アクティビティと場所とともにRequestFactoryを使用します。

stableId()プレイス内のRequestFactoryをトークン化するために、RequestFactoryを注入します。これにより、クラスはとにアクセスできgetProxyId(token)ますgetHistoryToken(stableId)。Tokenizerは、静的ではない保護されたメソッドを呼び出して、特定のプレイスをトークン化します。

これがサンプルクラスです。

public class StableIdPlace extends Place {

  @Inject private static Provider<StableIdPlace> provider;

  private final MyRequestFactory requestFactory;
  private EntityProxyId<StableIdProxy> stableId;

  @Inject
  public StableIdPlace(MyRequestFactory rf) {
    requestFactory = rf;
  }

  public void setStableId(EntityProxyId<StableIdProxy> which) {
    stableId = which;
  }

  public EntityProxyId<StableIdProxy> getStableId() {
    return stableId;
  }

  protected void setFromHistoryToken(String token) {
    stableId = requestFactory.getProxyId(token);
  }

  protected String getHistoryToken() {
    return requestFactory.getHistoryToken(stableId);
  }

  public static class Tokenizer implements PlaceTokenizer<StableIdPlace> {
    @Override
    public String getToken(StableIdPlace place) {
      return place.getHistoryToken();
    }
    @Override
    public StableIdPlace getPlace(String token) {
      StableIdPlace place = provider.get();
      place.setFromHistoryToken(token);
      return place;
  }
}

この戦略では、新しい場所が必要な場所にプロバイダーを注入する必要があります。残念ながら、これには静的トークナイザーが含まれます。

requestStaticInjection()Ginクライアントモジュールで(Placeクラスごとに)静的インジェクションを開始しようとしました。歴史を除いて、私が持っているものは機能します。静的プロバイダーを初期化できません。TokenizerでNull例外が発生します。

これを行うためのより良い方法はありますか?ポインタありがとうございます。

4

1 に答える 1

1

を使用しPlaceHistoryMapperWithFactoryて、Ginjector、Provider、またはAssistedInjectファクトリからトークナイザーインスタンスを作成できます。

(場所ではなく、RFをトークナイザーに注入したいのですが、場所はプロキシに関するものであり、トークナイザーは履歴トークンに関するものです)

于 2012-08-13T21:45:12.493 に答える