を上書きするにはどうすれば拡張アラートマネージャ作成しました: インタフェースタペストリーのAlertManager
public interface AlertManagerExt extends AlertManager {
void successCode(String messageCode, Object... args);
void infoCode(String messageCode, Object... args);
void warnCode(String messageCode, Object... args);
void errorCode(String messageCode, Object... args);
}
と実装私はバインダーを経由して、それをバインドしようとしました
public class AlertManagerExtImpl extends AlertManagerImpl implements AlertManagerExt {
private final Messages messages;
public AlertManagerExtImpl(ApplicationStateManager asm, Request request, AjaxResponseRenderer ajaxResponseRenderer,
PerthreadManager perThreadManager, Messages messages) {
super(asm, request, ajaxResponseRenderer, perThreadManager);
this.messages = messages;
}
@Override
public void successCode(String messageCode, Object... args) {
success(getMessage(messageCode, args));
}
@Override
public void infoCode(String messageCode, Object... args) {
info(getMessage(messageCode, args));
}
@Override
public void warnCode(String messageCode, Object... args) {
warn(getMessage(messageCode, args));
}
@Override
public void errorCode(String messageCode, Object... args) {
error(getMessage(messageCode, args));
}
protected String getMessage(String code, Object... args) {
if (args.length > 0) {
return messages.format(code, args);
}
return messages.get(code);
}
}
:
binder.bind(AlertManagerExt.class, AlertManagerExtImpl.class);
I例外が発生しました:
java.lang.RuntimeException: Service interface org.apache.tapestry5.alerts.AlertManager is matched by 2 services: AlertManager, AlertManagerExtImpl. Automatic dependency resolution requires that exactly one service implement the interface.
at org.apache.tapestry5.ioc.internal.RegistryImpl.getServiceByTypeAlone(RegistryImpl.java:789)
at org.apache.tapestry5.ioc.internal.RegistryImpl.getServiceByTypeAndMarkers(RegistryImpl.java:797)
at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:755)
AlertManagerからすべてのメソッドをコピー&ペーストすることはできますが、拡張することはできません。しかし、良い方法があるかもしれませんか?
私が必要とするのは、サービスの実装からかなり明らかです。私はT5 IoCにかなり精通しています。私がstackoverflowで質問を投稿したのは、私のケースがドキュメントでカバーされていないということです。 – xl0e