【问题标题】:App.Config or XAMLApp.Config 或 XAML
【发布时间】:2010-05-21 08:46:24
【问题描述】:

我目前正在评估我的选项,以重写我正在处理的项目,我对我们的 app.config 文件的字符串类型的性质有点恼火。

我想改用更有条理的方法,所以我有两个选择:

  • 在 app.config 中使用自定义 SectionHandlers
  • 废弃 app.config 并改用 XAML。

我想听听您对此的看法和恐怖故事,为此使用 XAML 的优缺点是什么?

干杯, 弗洛里安

【问题讨论】:

  • +1 对于使用 Xaml 进行配置的有趣想法。
  • 刚刚注意到 Jebrains Resharper 2016.1 使用 xaml 将解决方案设置存储在 *.DotSettings.User 文件中。伟大的思想......

标签: .net xaml configuration


【解决方案1】:

如果我们谈论的是配置文件,我会使用 app.config 吗?为什么?这就是它的意义所在。如果我们谈论资源(图片、消息),我会将它们放在 XAML 资源目录中。

网上有一个关于在哪里放置内容的指南,但我上次检查时仍在草稿中并且没有提到 app.config afaik。

但是做最适合你的事情:)

【讨论】:

    【解决方案2】:

    就开发工作而言,是其他六分之一。

    如果您使用 Xaml,则需要创建一组 Xaml 将为其创建的类实例。

    如果您使用自定义 SectionHandlers,您仍然需要创建这些部分将代表的类实例。您还需要创建 SectionHandlers。

    1 - 0 到 Xaml。

    在 Xaml 的情况下,尽管您需要提供自己的基础设施来在启动时加载 xaml 并访问整个应用程序的配置。

    另一方面,使用部分处理程序,现有的 .NET ConfigurationManager 提供了访问这些的基础设施。

    1 个

    【讨论】:

    • 当下一个人来阅读您的代码时,他会明白您在使用自定义节处理程序做什么。他将通过 XAML 获得 WTF 时刻。 2-1 配置。
    【解决方案3】:

    如果您正在使用 .NET 4,为什么不结合您的两个选项并将 XAML 放入 App.config 中?

    using System.Configuration;
    using System.Xaml;
    using System.Xml;
    
    public class XamlConfigurationSection : IConfigurationSectionHandler
    {
        public object Create(object parent, object configContext, XmlNode section)
        {
            return XamlServices.Parse(section.OuterXml);
        }
    }
    

    此自定义配置部分允许您在 App.config 中包含任何描述为 XAML 的对象:

    <configSections>
      <section name="SomeType" type="XamlConfigurationSection, …" />
    </configSections>
    
    <SomeType xmlns="clr-namespace:SomeNamespace;assembly=…"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      …
    </SomeType>
    

    前提是你有一个类型:

    namespace SomeNamespace
    {
        public class SomeType
        {
            public SomeType() { … }  // XAML requires a parameterless constructor
            …
        }
    }
    

    并最终从App.config 中检索此类型的实例:

    var objectOfSomeType = ConfigurationManager.GetSection("SomeType") as SomeType;
    

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 2016-04-23
      • 2014-01-19
      • 2016-10-06
      • 2011-10-12
      • 2015-06-06
      • 2010-12-27
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多