我正在使用C#WCF项目创建RESTful服务,并且对接口和宏常量替代方案有疑问。
我有一堆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}"
创建一个宏常量,以便它不会在任何地方重复出现。
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/但我不认为这适用于此,因为我认为在界面的实现中修改装饰字符串为时已晚
答案 0 :(得分: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
是正确的,因为整个值是在编译时计算的,在生成的程序集中,属性中只有组合字符串。