그래서 맨 위에 WCF 서비스 인터페이스를 추가하는 계층화 된 응용 프로그램이 있습니다. 이 서비스는 단순히 클래스 라이브러리 인 BLL (Business Logic Layer) 내의 비즈니스 오브젝트 (BO)에 이미 존재하는 모든 비즈니스 로직을 가진 외관입니다. BLL 내에서 생성자 삽입을 사용하여 BO에 종속성을 주입합니다. 이것은 좋은 단위 테스트 등으로 모두 작동합니다 ...종속성 주입을 사용하는 WCF 데이터 계약 설계
일반적으로 작업에 적합한 속성을 가진 각 서비스 메서드에 대해 DataContracts로 요청/응답 개체 집합을 만듭니다. 작업에서 우리 엔티티 중 하나를 메서드로 전달하거나 메서드에서 전달해야하는 경우 해당 유형의 속성 만 정의하면 모든 것이 잘됩니다. 우리의 모든 BO는 직렬화 가능합니다. 그러나 이러한 "엔터티"중 하나가 서비스 메서드로 전달되면 WCF는 정의한 생성자를 호출하지 않고 개체를 deserialize하고 결과적으로 종속성이 해결되지 않습니다.
CreateSomething이라는 서비스 방법의 경우를 사용하십시오. 나는 일반적으로 같은 서명 서비스 작업으로이를 정의하는 것 :
CreateSomethingResponse CreateSomething(CreateSomethingRequest request);
CreateSomethingRequest DataContract 수 및 유형의 속성을 속성 사이에 전달되는 "법인"을 표현 뭔가있을 것입니다 서비스. 어떤 경우은 인스턴스를받을 것으로 예상되는 비즈니스 개체입니다. 인스턴스화 될 때 DI 컨테이너의 인터페이스가 사용됩니다. 위의 설명처럼 WCF가 서버의 개체를 deserialize 할 때 발생하지 않습니다.
옵션 # 2 컨테이너가 주입시키는의 DataContract에서 뭔가 속성을 제거하고 내 서비스 메서드 내에서 다음 내 DataContract에 명시 적으로 각 속성을 정의의 뭔가 클래스의 새로운 인스턴스를 생성하는 것입니다 그런 다음 DataContract 개체의 속성 값을 BO에 매핑합니다. 그리고 나는 확실히 그것을 할 수는 있지만, 말하자면, 재산을 추가하고 싶다면 두 곳을 바꾸는 것에 대해 걱정하고 있습니다. 뭔가 유형입니다. 그리고 많은 속성을 가진 많은 코드 중복이 있습니다.
아무도이 다리를 건너지 않았습니까? 그렇다면 자신의 생각을 공유하고 자신의 응용 프로그램에서이 상황에 어떻게 접근 할 수 있습니까? 고마워!!!
첫째 : 당신 실체를 전송하고 데이터 전송이 대신 개체를 사용하지 마십시오