0

我的注入 Gin 的 GWT 应用程序将 RequestFactory 与活动和地点一起使用。

为了在 Places 中标记 RequestFactory stableId(),我注入了 RequestFactory。这使班级可以访问getProxyId(token)getHistoryToken(stableId)。Tokenizer 调用非静态的、受保护的方法来标记特定的 Place。

这是一个示例类。

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

您可以使用 aPlaceHistoryMapperWithFactory从 Ginjector、Provider 或 AssistedInject 工厂创建标记器实例。

(我宁愿将射频注入标记器而不是地方,地方是关于代理的,标记器是关于历史令牌的)

于 2012-08-13T21:45:12.493 回答