Регистрация объекта HttpConfiguration
как экземпляра в UnityContainer
также поможет решить проблему.
Просто нужно добавить, чтобы добавить строку ниже при регистрации в UnityContainer
.
public static void RegisterTypes(IUnityContainer container) {
container.RegisterInstance<HttpConfiguration>(GlobalConfiguration.Configuration);
}
Это поможет Unity
разрешить параметр config
, когда он вызывает конструктор с параметром.
public HelpController(HttpConfiguration config) {
Configuration = config;
}
Как вы говорите, вы не можете связать их вместе. В javadoc для обоих четко указано, что они оба должны находиться в конце цепочки преобразователя.
Я предлагаю, чтобы, если вам действительно нужно использовать их вместе, вы написали простую пользовательскую реализацию ViewResolver, которая принимает имя представления, и решает, какой из двух «реальных» преобразователей представлений делегировать. Это предполагает, что вы можете сказать, какой преобразователь вызывать, на основе имени представления.
Итак, вы должны определить собственный ViewResolver следующим образом:
public class MyViewResolver implements ViewResolver {
private ViewResolver tilesResolver;
private ViewResolver jspResolver;
public void setJspResolver(ViewResolver jspResolver) {
this.jspResolver = jspResolver;
}
public void setTilesResolver(ViewResolver tilesResolver) {
this.tilesResolver = tilesResolver;
}
public View resolveViewName(String viewName, Locale locale) throws Exception {
if (isTilesView(viewName)) {
return tilesResolver.resolveViewName(viewName, locale);
} else {
return jspResolver.resolveViewName(viewName, locale);
}
}
private boolean isTilesView(String viewName) {
.....
}
}
Вам нужно будет реализовать метод isTilesView, чтобы решить, какой преобразователь делегировать.
В конфигурации XML определите этот новый преобразователь представлений и сделайте убедитесь, что он появляется перед другими.
<bean class="MyViewResolver">
<property name="tilesResolver" ref="tilesViewResolver"/>
<property name="jspResolver" ref="viewResolver"/>
</bean>
Похоже, вы на правильном пути, но нужно иметь в виду, что некоторые преобразователи представлений ведут себя так, как будто они всегда разрешали представление. Вы должны указывать такие резолверы последними в вашем заказе. Я считаю, что представление Tiles является одним из таких.
Edit: упс ... да, другой плакат правильный, оба этих преобразователя будут «всегда соответствовать», поэтому вы не можете использовать их оба в цепочке. Другой альтернативой может быть попытка расширить TilesView для выполнения простого рендеринга JSP, если он не может найти настроенное представление плитки.