【问题标题】:Using Settings with Complex Types使用复杂类型的设置
【发布时间】:2010-10-10 20:24:23
【问题描述】:

我在我的 .NET 项目中使用 Settings 类。我在编辑器中注意到,只有某些类型可用作设置类中各个属性的类型。例如,如果我想拥有一个来自我的代码或通用集合的枚举属性怎么办?我将如何实现它?

我猜我可以使用部分类机制在单独的文件中执行此操作(因为设置已经定义为部分类)但我想看看是否有人同意这一点以及是否有办法在编辑器中执行。

【问题讨论】:

  • 我不确定是否正确理解您的问题,主要是关于编辑器和“某些类型可用作类型”的部分,您能澄清一下还是改写一下?
  • 如果您在项目中创建一个 Settings.settings 文件,那么您可以使用一个编辑器来设置设置的数据类型、名称等。您从 TreeList 框中选择设置的数据类型。该 TreeList 框仅引用某些类型。我的程序集中的类型不是引用。
  • 引用*不是引用... :)

标签: c# configuration settings


【解决方案1】:

创建一个新的“设置”文件以添加复杂/用户定义的选择类型。 这是 Enum 的操作方法。

第 1 步。创建设置文件

第 2 步。浏览类型

第 3 步。选择类型(Namespace.TypeName)

第 4 步。达达 - 完成

【讨论】:

  • 谢谢,我不知道你可以简单地指定类型,它会工作。您知道是否可以以相同的方式为设置指定通用列表?
  • 据我所知,设置文件基本上可以让你返回任何你想要的类型。但是泛型列表是指泛型集合?
  • 如果您试图根据配置数据返回不同类型的通用列表,那么简单地指定“类型”名称而不是返回实际的集合对象不是更好吗?
  • 我成功地添加了一个用户定义的设置类型,但是在指定我想要的默认值时遇到了麻烦,因为它是一个复杂的类型。我的类型由三个 PointF 组成,所以我最终通过输入“f1.X=0,f1.Y=500, f2.X=500, f2.Y=500, f3.X=500, f3.Y=500 ”。任何复杂类型都可以用这种方式赋值。
【解决方案2】:

要让自定义类显示在该列表中,请确保它具有默认构造函数作为其构造选项之一。我很难学到这一点

【讨论】:

    【解决方案3】:

    要回答 Jeffrey 关于在设置文件中是否可以使用通用列表的评论/问题,答案是肯定的。您只需手动编辑设置 xml 文件。例如,如果我有以下课程:

    public class UrlAlias
    {
        public string Name { get; set; }
        public string BaseUrl { get; set; }
    }
    

    我可以通过右键单击我的设置文件并选择打开方式来创建这些列表

    然后选择 XML / Text Editor,并将“Type”值设置为完全限定的类名,即:

    Type="System.Collections.Generic.List`1[MyProject.SomeNamespace.UrlAlias]"
    

    完整的设置 xml 如下所示:

    <?xml version='1.0' encoding='utf-8'?>
    <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MyProject.Properties" GeneratedClassName="Settings">
     <Profiles />
      <Settings>
        <Setting Name="UrlAliases" Type="System.Collections.Generic.List`1[CommonAddin.Data.DataSource.UrlAlias]" Scope="User">
          <Value Profile="(Default)"></Value>
        </Setting>
      </Settings>
    </SettingsFile>
    

    完成此操作后,您应该拥有您创建的自定义设置对象的正确配置列表。

    【讨论】:

      【解决方案4】:

      作为部分类的一部分在单独的文件中执行它是完全可以接受的。

      【讨论】:

        【解决方案5】:

        如果您希望能够通过配置文件填充复杂的对象,我建议您使用一些依赖注入框架 s.a。 Spring.Net.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-21
          • 2012-10-05
          • 2013-01-21
          • 2013-07-08
          • 1970-01-01
          • 1970-01-01
          • 2015-04-21
          相关资源
          最近更新 更多