2012-05-17 1 views
2

현재 'CodeProcessor'클래스를 통해 RIA 서비스의 클라이언트 측에서 엔티티가 생성되는 방식을 사용자 정의 할 수 있습니다. 클라이언트 측 생성이 필요한 도메인 서비스의 경우 코드 프로세서를 사용하여 각 엔티티/네임 스페이스를 가로 채고 조정 등을 수행 할 수 있습니다.컴파일하는 동안 RIA 툴링으로 생성 된 도메인 서비스를 가로채는 방법은 무엇입니까?

제 경우에는 어떤 도메인 서비스가 생성이 시작될지를 요격해야합니다 와.

DomainServiceDescription에는 생성되는 모든 서비스가 들어있는 정적 개인 읽기 전용 domainServiceMap이 있습니다. 그러나 내가 찾을 수있는 컴파일 시간 동안이 맵에 액세스 할 수있는 방법이 없습니다.

내가 생성 시작하기 전에 컬렉션에서 항목을 제거 할 수 있도록 해당 서비스 맵과 상호 작용할 수있는 어딘가에 후크가 있다는 것을 기대하고 있습니다.

아이디어가 있으십니까?

답변

4

CodeProcessor는이를 수행하는 옛 방식처럼 보이고 엔티티 생성에만 제한적이라고 생각합니다. 최신 버전에서는 모든 다른 부분에 대해 T4 기반 Generators를 지정할 수 있습니다.

WebProjjct에 Nuget의 RIAServices.T4을 설치하거나 코드 생성 클래스가 포함될 클래스 라이브러리를 설치하십시오. PM> 설치 - 패키지 RIAServices.T4을

이미 툴킷이있는 경우, 다만

그런 다음 우리는 아무튼 CSharpClientCodeGenerator, 상속해야하는 기준을 "Microsoft.ServiceModel.DomainServices.Tools.TextTemplate"를 추가 실제로는 아무 것도 생성하지 않지만 RIA에게 어떤 발전기가 그 속성 중 일부를 재정 의하여 사용하도록 지시합니다.

[DomainServiceClientCodeGenerator("MyCustomGenerator", "C#")] 
public class MyCSharpClientCodeGenerator : CSharpClientCodeGenerator 
protected override Microsoft.ServiceModel.DomainServices.Tools.TextTemplate.DomainContextGenerator DomainContextGenerator 
    { 
     get 
     { 
      //return base.DomainContextGenerator; 
      return new MyDomainContextGenerator(); 
     } 
    } 

그런 다음 우리는 우리를 위해 CSharpDomainContextGenerator에서 상속하는 (MyDomainContextGenerator를) 클래스를 구현하는 R 번호를 알려줍니다. 물론 R #을 사용하면 그냥 해줄 것입니다.

MyCSharpClientCodeGenerator에서 제공 할 수있는 다른 4 가지 코드 생성기가 있습니다.

이제 Silverlight 프로젝트 파일에서 RIA에 생성기를 사용하도록 알릴 필요가 있습니다. 우리는 Silverlight 프로젝트를 편집하고 LinkedServerProject 바로 뒤에 첫 번째 PropertyGroup 안에 다음 요소를 추가해야합니다 (순서는 중요하지 않습니다. 단지 참조로 말합니다).

<LinkedServerProject>..\SilverlightApplication2.Web\SilverlightApplication2.Web.csproj</LinkedServerProject> 
    <RiaClientCodeGeneratorName> 
    SilverlightApplication2.Web.RiaStuff.MyCSharpClientCodeGenerator,SilverlightApplication2.Web 
    </RiaClientCodeGeneratorName> 
</PropertyGroup> 

Silverlight 프로젝트와 voila를 다시 컴파일하십시오. 그것은 추락 할 수도 있습니다. 이를 디버깅하기 위해 Visual Studio의 다른 인스턴스를 열고이 새 인스턴스에서 생성기에 중단 점을 설정하고 Visual Studio의 첫 번째 인스턴스에 연결 한 다음 Silverlight 프로젝트를 다시 컴파일 할 수 있습니다.