2013-04-30 6 views
1

C# WCF 프로젝트를 사용하여 RESTful 서비스를 만들고 인터페이스 및 매크로 상수 대체에 대한 질문이 있습니다. 등C# 인터페이스 및 매크로 상수 대체

public interface IRestSerivce 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "{a}/{b}/{c}/someName01?param={val}")] 
    string Handler01(..); 

    [OperationContract] 
    [WebGet(UriTemplate = "{a}/{b}/{c}/someName02?param={val}")] 
    string Handler02(..); 

    [OperationContract] 
    [WebGet(UriTemplate = "{a}/{b}/{c}/someName03?param={val}")] 
    string Handler03(..); 
} 

과 :

나는 (매우 간단)과 같이 WebGet이 장식의 무리가 있습니다.

과거에는 C를 광범위하게 사용했기 때문에 일반적으로 일반 텍스트 "{a}/{b}/{c}"에 대한 매크로 상수가 만들어져 어디서나 반복되지 않습니다.

private readonly string 또는 private const string과 같은 일반적인 C# 대안은 문제가되는 문자열 (문제가되는 문자열)로 인해이 시나리오에서 작동하지 않으며 어떤 경우에도 인터페이스에 구성원이 포함될 수 없습니다.

API의 향후 변경 사항 (예 : {b}{b1}/{b2}으로 바뀜)을 사용하면 어디에서나 변경 작업을 수행 할 수 있나요?

여기 해결책은 여기에 언급 된 것과 같습니다 : http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/71e8d202-b249-49bb-a85d-b0ef8207463d/하지만 인터페이스의 구현에서 장식 문자열을 수정하기에는 너무 늦었다 고 생각하기 때문에 여기에 해당한다고 생각하지 않습니다.

답변

4

const string이어야합니다. 인터페이스 안에 가질 수는 없지만 다른 클래스의 상수를 참조 할 수 있습니다.

static class Prefixes 
{ 
    public const string Basic = "{a}/{b}/{c}"; 
} 

public interface IRestSerivce 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = Prefixes.Basic + "/someName01?param={val}")] 
    string Handler01(..); 
} 

전체 값은 컴파일 시간에 상기 속성에만 결합 캐릭터가 생성 된 어셈블리에서 연산으로 const string를 사용하여 확인한다.

+0

고맙습니다. 이것이 컴파일 시간에 계산된다는 것을 인식하지 못했습니다. – Varun