0

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

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 框架 4.5 上,我的想法是,由于该功能已从企业库中删除,它现在应该原生存在于 .Net 框架中。

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

感谢您查看我的帖子。

4

2 回答 2

3

我使用Castle Windsor XML 内联参数

这是配置文件(将其保存为 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);
            }
        }
    }
}

您甚至可以使用 List 和 Dictionary 作为属性

于 2013-05-23T10:31:10.233 回答
1

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

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

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

另一种方法是利用工具来创建配置类。例如,配置部分设计器

在此处输入图像描述

于 2013-06-05T19:44:33.483 回答