【问题标题】:Custom configuration in .NET.NET 中的自定义配置
【发布时间】:2010-10-18 07:49:48
【问题描述】:

我看到了有关 .NET 中自定义配置的简单示例。我的情况有点复杂,有嵌套节点。

我希望能够从配置文件中读取:

 <environments>

<environment name="live" url="http://www.live.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="b" IP="192.168.1.20"></server>
  <server name="c" IP="192.168.1.30"></server>      
</environment>

<environment name="dev" url="http://www.dev.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="c" IP="192.168.1.30"></server>
</environment>

<environment name="test" url="http://www.test.com">
  <server name="b" IP="192.168.1.20"></server>
  <server name="d" IP="192.168.1.40"></server>
</environment></environments> 

如果有人可以为此提供一些代码,我将不胜感激。

谢谢!

【问题讨论】:

    标签: .net configuration configuration-files


    【解决方案1】:

    您可以通过实现从 ConfigurationElement 类继承的自定义配置类来阅读此内容。

    以下是“服务器”元素的示例:

    public class ServerElement: ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
        public string Name
        {
            get { return ((string)base["name"]); }
            set { base["name"] = value; }
        }
    
        ...
    }
    

    环境元素实际上是一个集合,可以这样实现:

    public class EnvironmentElement: ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement(string elementName)
        {
            return new ServerElement(...);
        }
    }
    

    【讨论】:

    • 谢谢 PEter,你能继续写其他类吗?这真的很令人困惑,如何连接整个事情:/
    • 这足以让您入门吗? :)
    • 好的,非常感谢。我会尝试从这里开始。再次感谢。
    【解决方案2】:

    我最近遇到的一个漂亮工具是 CodePlex 上的 Configuration Section Designer;很好地集成到 VS 中。

    生成类、XML 架构等。推荐。

    【讨论】:

    • 出色的工具,在尝试手动操作数小时后,我可以毫无问题地进行操作。谢谢!
    【解决方案3】:

    您需要创建一些类来处理配置文件的自定义配置部分。

    Phil Haack 有一篇非常好的博客文章:Custom Configuration Sections in 3 Easy Steps.

    编辑:

    我试图找到我过去用来学习如何实现这一点的代码项目文章,我在 Phil 的博客条目中找到了它:

    这里是Unraveling the Mysteries of .NET 2.0 Configuration

    它包含处理嵌套元素和集合所需的信息。

    【讨论】:

      【解决方案4】:

      这个例子可能会有所帮助:To create a custom configuration section handler (MSDN)

      【讨论】:

      • 谢谢,但这个例子没有像我这样的场景......我见过很多简单的例子,但没有嵌套节点
      【解决方案5】:

      查看示例的内容(针对不同的登台环境),而不是动态读取配置文件,您可能希望查看web deployment projects,如answer to an earlier question 中所示。

      他们在部署时处理配置合并:一个好主意,特别是如果您有敏感信息,例如带有服务帐户密码的连接字符串......

      【讨论】:

        【解决方案6】:

        我会使用 App.Config 文件

        System.Configuration.ConfigurationSettings.AppSettings["DatabasePath"];

        http://www.eggheadcafe.com/community/aspnet/2/10004734/appconfig-file-c.aspx

        【讨论】:

          【解决方案7】:

          这是我读完这篇文章后最近实现的:

          使用反射将类绑定到 .ini 文件

          http://dvuyka.spaces.live.com/blog/cns!305B02907E9BE19A!174.entry

          【讨论】:

            猜你喜欢
            • 2013-09-21
            • 1970-01-01
            • 2018-10-01
            • 2014-02-14
            • 1970-01-01
            • 1970-01-01
            • 2022-08-14
            • 1970-01-01
            • 2013-12-05
            相关资源
            最近更新 更多