4

我正在尝试利用 .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 }

不等同于上述。

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

4

2 回答 2

5

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

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

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

自从他写那篇文章以来已经有很长时间了,但它应该仍然可以正常工作。

于 2012-05-08T21:05:14.490 回答
2

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

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

我可以建议一些代码片段来让您更容易(并且更不容易出错)创建这些属性吗?

于 2012-05-08T21:04:42.790 回答