ConfigurationProperty的典型示例

时间:2012-05-08 20:53:18

标签: c# .net

我正在尝试使用.NET配置并了解自定义部分,元素等。

似乎实现这些自定义部分需要明确声明getter和setter,通常会导致代码膨胀。

例如:

http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

具体来说,我们似乎有必要在get和set方法中显式返回和设置内容。

// Create a "remoteOnly" attribute.
[ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]
public Boolean RemoteOnly
{
  get
  { 
    return (Boolean)this["remoteOnly"]; 
  }
  set
  { 
    this["remoteOnly"] = value; 
  }
}

使用以下

[ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]
public Boolean RemoteOnly { get; set }

不等同于上述内容。

这是否真的如此 - 即使有这样的香草属性,我们也必须冗长吗?

2 个答案:

答案 0 :(得分:5)

是的,因为你依赖的是外部存储机制(基类的字典最终会填充配置文件)。

另外,如果你担心代码臃肿,你会担心错误的事情。写一次,再也不看了。您不应该有太多代码处理自定义配置设置,它会使您的代码库膨胀。可能是一个小小的凹凸,但不是臃肿。另外,我很高兴你现在处理这个问题而不是VS2005之前 - 你必须编写更多的代码(你必须手动解析XML部分)。

最后,如果你仍然讨厌那么多,你可以随时使用“我需要的最后一个配置部分处理程序”: https://sites.google.com/site/craigandera/craigs-stuff/clr-workings/the-last-configuration-section-handler-i-ll-ever-need

他写这篇文章已经有很长一段时间了,但它仍然可以正常工作。

答案 1 :(得分:2)

更简洁的表单{ get; set; }扩展为使用私有数据成员(如果我没记错的话)。这只是C#的语法糖,并不与配置系统有任何关系。

对于ConfigurationProperty,您需要访问当前对象上的索引器来存储/检索您的值,因为这就是系统的设计方式。你是对的,它有点冗长,但没有真正的解决方法 - 那就是必须如何存储/检索这些值。

我可以建议一些Code Snippets让您更轻松(并且不易出错)来创建这些属性吗?