实际上我正在使用自定义样板代码来完成此任务:
public class PuksaActivityMapper implements ActivityMapper {
private HashMap<String, ActivityContainer> mappings;
@Inject
private SearchResultActivityContainer searchResultContainer;
@Inject
private HelloActivityContainer helloContainer;
@Override
public Activity getActivity(Place place) {
ActivityContainer container = getMappings().get(place.getClass().getName());
return container.getActivity(place);
}
public HashMap<String, ActivityContainer> getMappings() {
if (mappings == null) {
mappings = new HashMap<String, ActivityContainer>();
mappings.put(ShowResultsPlace.class.getName(), searchResultContainer);
mappings.put(HelloPlace.class.getName(), helloContainer);
}
return mappings;
}
Run Code Online (Sandbox Code Playgroud)
}
其中ActivityContainer是一个简单的工厂类型(此时可以使用经典的ioc方法)。
当然,现在它只是通过地图查找/填充来更改“if 块”,但与Gin 多重绑定(当前不存在)相结合可以完成它的工作。
另外,Gin 增强功能- GWT 活动/场所的通用 GinModule 看起来很有前途。