2013-04-30 61 views
1

我正在使用C#WCF項目創建一個RESTful服務,並且有關於接口和宏常量替代品的問題。C#接口和宏常量替代品

我有一堆WebGet修飾,這看起來像這樣(高度簡化)的:

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(..); 
} 

等等。

在過去廣泛使用C之後,我通常會爲普通文本"{a}/{b}/{c}"創建一個宏常量,這樣它就不會在任何地方重複。

通常的C#替代品,如private readonly stringprivate const string不會在這種情況下,由於同類問題(它是在一個飾),在任何情況下,接口不能有成員串的工作。

有什麼辦法可以使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 2013-04-30 01:55:07