我的Gin注入的GWT应用程序将RequestFactory与Activities和Places一起使用。
要在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;
}
}
该策略要求在需要新地点的地方注入提供商。 不幸的是,这包括静态标记符。
我尝试在Gin客户端模块中使用requestStaticInjection()
启动静态注入(对于每个Place类)。我的作品 - 除了历史。我无法让静态Provider初始化。它会在Tokenizer中导致Null异常。
有更好的方法吗?谢谢你的指示。
答案 0 :(得分:1)
您可以使用PlaceHistoryMapperWithFactory
从Ginjector,Provider或AssistedInject工厂创建tokenizer实例。
(我宁愿将RF注入令牌器而不是地点,这个地方是关于代理,关于历史令牌的标记器)