如何在.Net 4.5上存储.Net / ASP.Net应用程序的复杂配置信息

时间:2013-05-23 04:59:00

标签: .net configuration app-config enterprise-library configuration-files

我正在寻找一种简单而优雅的方法来存储我的应用程序的设置。这是一个密切描述我正在寻找的例子

public class Office
{
    string location;
    int numberOfWorkStations;
    int numberOfServers;
    string developerNames[];
}

配置如下:

<Office>
  <Location>Mumbai, India</Location>
  <NumberOfWorkStations>10</NumberOfWorkStations>
  <NumberOfServers>2</NumberOfServers>
  <DeveloperNames>
      <DeveloperName>GoGo</DeveloperName>
      <DeveloperName>MoMo</DeveloperName>
      <DeveloperName>JoJo</DeveloperName>
  </DeveloperNames>
</Office>

早在2005/6年,就有了一个企业库配置块,它将抽象出所有的XML序列化内容。

我正在查看企业库的最新版本,但似乎配置块不再存在。

我在.Net framework 4.5上,我的想法是,由于该功能已从企业库中删除,因此它现在应该存在于.Net框架中。

我已经读过这个blog,但感觉从ConfigurationSection,ConfigurationElement等派生出来的工作仍然比Enterprise Library过去提供的工作要多得多。我正在寻找的是非常接近XMLSerialization,但我不想编写代码来进行序列化,因为我觉得这就像重新发明轮子一样。

感谢您查阅我的帖子。

2 个答案:

答案 0 :(得分:3)

我使用Castle Windsor XML Inline Parameters

这是配置文件(将其保存为OfficeConfig.config并将其与您的exe放在同一个文件夹中)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <components>
    <component id="Office">
      <parameters>
        <Location>Mumbai, India</Location>
        <NumberOfWorkStations>10</NumberOfWorkStations>
        <NumberOfServers>2</NumberOfServers>
        <DeveloperNames>
          <array>
            <item>GoGo</item>
            <item>MoMo</item>
            <item>JoJo</item>
          </array>
        </DeveloperNames>
      </parameters>
    </component>
  </components>
</configuration>

以下是代码:

namespace ConsoleApplication1
{
    using System;
    using Castle.MicroKernel.Registration;
    using Castle.Windsor;
    using Castle.Windsor.Installer;

    public class Office
    {
        public string Location { get; set; }
        public int NumberOfWorkStations { get; set; }
        public int NumberOfServers { get; set; }
        public string[] DeveloperNames { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var container = new WindsorContainer()
                  .Install(Configuration.FromXmlFile("OfficeConfig.config"))
                  .Register(
                    Component.For<Office>().Named("Office").LifeStyle.Singleton,
                    Component.For<Program>().LifeStyle.Transient);

            var program = container.Resolve<Program>();
        }

        public Program(Office office)
        {
            Console.WriteLine(office.Location);
            Console.WriteLine(office.NumberOfWorkStations);
            Console.WriteLine(office.NumberOfServers);
            foreach (var name in office.DeveloperNames)
            {
                Console.WriteLine(name);
            }
        }
    }
}

您甚至可以使用列表和词典作为属性

答案 1 :(得分:1)

  

我正在查看企业库的最新版本,但似乎配置块不再存在。

     

我在.Net framework 4.5上,我的想法是,由于该功能已从企业库中删除,它现在应该   存在于.Net框架中。

是的,您的假设是正确的。当功能进入.NET Framework时,配置块被删除。

另一种方法是利用工具创建配置类。例如,Configuration Section Designer

enter image description here