2017-03-07 2 views
1

을 무시하는 방법은 확장 경고 관리자 만들었습니다 인터페이스태피스트리 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에서 모든 메서드를 복사하여 붙여 넣을 수 있으며 확장하지 않는다는 것을 알고 있습니다. 그러나 더 좋은 방법이있을 수 있습니까?

답변

0

실제로 필요한 것에 따라 몇 가지 방법으로이 작업을 수행 할 수 있습니다. documentationIoC cookbook을 읽으시기 바랍니다.

Inversion of Control 구성을 이해하는 것은 매우 강력한 모듈이므로 중요합니다.

+0

내가 필요한 것은 서비스 구현의 소스에서 꽤 분명합니다. 나는 T5 IoC에 대해 매우 잘 알고 있으며 stackoverflow에 제 질문을 게시 한 이유는 제 경우가 문서에서 다루지 않는다는 것입니다. – xl0e

1

Tapestry IoC는 인터페이스 유형별로 @Inject으로 시도 할 때 인터페이스를 구현하는 모든 서비스를 찾으려고합니다. 귀하의 새 AlertManagerExtAlertManager을 구현하므로 모호합니다.

은 일반적으로 명시 적으로 규정하는 서비스 ID 또는 마커 주석에 의해 해결됩니다 만, 태피스트리의 핵심 코드는 이미 @Inject에만 인터페이스에 의해 AlertManager을 보내고 귀하의 경우에 작동하지 않습니다.

관련 문제