Castle Monorail의 Databinder/SmartDispatcherController를 인터페이스 인 속성을 포함하는 유형에 바인딩하는 방법은 무엇입니까?
-
08-07-2019 - |
문제
우리는 인터페이스를 사용하여 도메인 모델에서 엔터티 클래스를 나타냅니다. LinqToSQL을 사용하기 때문에 이들의 구체적인 구현이 있습니다. 우리는 서비스 계층이 새로운 엔티티를 인스턴스화하는 데 사용하는 각 LinqToSQL 클래스에 공장 메소드를 추가했습니다 (컨트롤러의 데이터 바인드 속성과는 반대로).
Monorail의 기본 데이터베이너 구현은 인터페이스로 정의 된 속성을 무시합니다.
이상적으로는 Monorail의 데이터 계층 클래스를 인스턴스화하고 싶지 않습니다. 인터페이스의 요점은 이러한 문제를 분리하는 것입니다.
또한, 우리는 실제로 층간에 번역하는 것이 아닌 다른 비 LinqtoSQL 콘크리트 클래스 세트를 만들고 싶지 않습니다.
a의 끝입니다 진짜 여기서 긴 하루; 누군가가 자비를 베풀고 Idatabinder의 일부에서 우리가 자신의 구현으로 과부하를 걸거나 우리가 시도 할 수있는 다른 접근법을 힌트해야한다고 우리를 가리킬 수 있습니까? ;-)
해결책
iParameterBinder를보고 있어야합니다. 보세요 내가 주제에 대해 작성한 게시물
다른 팁
Ken이 지적했듯이 귀하의 아이디어는 사용자 정의 IPARAMETERBINDER로 구현할 수 있습니다.
해결책은 IOC를 사용하는 것입니다.
- 인터페이스에서 양식의 구체적인 인스턴스를 해결
- 그런 다음 idatabinder를 사용하여 인스턴스를 요청 매개 변수에 바인딩합니다.
다른 하나는 idictionaryAdapter를 사용하는 것입니다.
- 인터페이스에 대한 DTO 프록시를 생성하십시오
- 그런 다음 idatabinder를 사용하여 DTO 프록시 인스턴스를 요청 매개 변수에 바인딩합니다.
NB : 인터페이스 인 경우 두 번째 옵션이 작동하지 않습니다.
- 공개적이지 않다 (hum)
- 방법이 있습니다
- 또는 이벤트
- 또는 Readonly 속성
- 또는 setonly 속성
마지막으로, 컨트롤러 서명에 구체적인 클래스를 노출시키는 데 문제가 무엇인지 잘 모르겠습니다.
나는 응용 프로그램 계층 서비스에 정의 된 인터페이스를 구현하는 컨트롤러에 구체적인 형태를 사용하여 양쪽에 분리 된 우려를 가질 수 있습니다.
- 컨트롤러 측은 HTTP 매핑 및 양식/명령의 첫 번째 레벨 데이터 검증입니다.
- 응용 프로그램 계층 서비스는 양식/명령의 비즈니스 검증 및 처리입니다.