从xml配置文件实例化对象的标准方法

时间:2014-03-10 23:40:09

标签: c# serialization xml-parsing configurationmanager

问题:如何基于配置文件实例化模型?

背景:我有一个模型模拟器应用程序,由几十种不同类型的对象组成,每个对象由其他对象组成(在复杂的组合层次结构中)。我希望能够基于外部配置文件实例化模型。这种任务是否有“标准方法”?

例如,如果我有这样的config.xml文件:

<site>
    <facility name="F1">
        <tank name="t1"/>
        <pipe name="p1"/>
    </facility>
    <facility name="F2">
    ...

我想要一个可以解析该文件的Configurator并创建一个Site对象,该对象由一系列由各种Tank&amp;组成的Facility对象组成。管道设备等(最后我也会反过来坚持模型。)模型配置会经常变化;用户将收集许多不同版本的配置文件。

以下是我见过的一些选项建议,但我还没有使用过任何这些工具,我希望得到一些建议,告知哪些(如果有的话)这些方法可能最适合这个问题。

  1. 我自己的xml配置文件的角色,使用XmlTextReader解析它,并使用反射实例化模型以将字符串映射到类型。 (但这是否重新发明轮子?)
  2. 使用System.Configuration中的ConfigurationManager,在app.config中存储设置。 (但不确定如何支持“配置文件的许多不同版本”要求。)
  3. 使用XmlSerializer。 (但我明白这需要默认的构造函数,这将排除我希望使用的基于构造函数的依赖注入。)
  4. 使用IoC容器。 (但我有几个没有经验的程序员将与该程序进行交互;我宁愿不要用不必要的复杂性压倒他们。)
  5. (底线:我希望“尽可能做最简单的事情”。但我对这些工具的不熟悉使我无法确定哪一个最简单。)

1 个答案:

答案 0 :(得分:1)

选项1:

@JohnSaunders说,不推荐使用创建XmlTextReader的特定方法,而不是XmlTextReader本身。确实如此。看这里: http://msdn.microsoft.com/en-us/library/9khb6435(v=vs.110).aspx

虽然一长串案例是一个选项,但可能不会在代码中创建这样的结。备选方案:

选项2:

我无法看到如何保存app.config中的配置而不是其他某些XML文件与原始问题相关或解决原因。

选项3:

然后不要分散序列化代码。

选项4:

如何查看不那么大的DI框架的源代码,以获取如何做到的想法呢?

HTH