app.config 的自定义配置 - 部分集合?

2023-11-25

我的头实在是太痛了!我以前做过这件事,但没有这么“深入”或复杂,我尝试了不同的方法来实现这一点,但都失败了。

所以,这是我想要在 app.config 中使用的自定义 XML:

<Profiles> <!--Collection-->
<Profile Name="Live">
   <Components>
    <Component Name="Portal" Type="Web" />
    <Component Name="Comms" Type="Web" />
    <Component Name="Scheduler" Type="WindowsService" ServiceName="LiveScheduler" />
  </Components>
  <Databases>
    <Database Name="Main" Connection="Data Source=.\SQL2008" />
    <Database Name="Staging" Connection="Data Source=SomeSite.co.uk" />
  </Databases>
</Profile>
<Profile Name="Test">
   <Components>
    <Component Name="Portal" Type="Web" />
    <Component Name="Comms" Type="Web" />
    <Component Name="Scheduler" Type="WindowsService" ServiceName="TestScheduler" />
  </Components>
  <Databases>
    <Database Name="Main" Connection="Data Source=.\SQL2008" />
    <Database Name="Staging" Connection="Data Source=Internal" />
  </Databases>
</Profile>
</Profiles>

因此,Profile 的集合,每个配置文件都有一个子元素的集合(Components 是一个集合,然后 Component 是一个元素)

然而,除了多个配置文件之外,我目前拥有所有这些。我确实看到了这个问题,但不知道如何“修复”它。

Code:

public class Profile : ConfigurationSection
{
    [ConfigurationProperty("Name", IsRequired=true)]
    public string Name
    {
        get
        {
            return base["Name"] as string;
        }
            set
            {
                base["Name"] = value;
            }
        }

        [ConfigurationProperty("Components")]
        public ComponentCollection Components
        {
            get { return ((ComponentCollection)(base["Components"])); }
        }

        [ConfigurationProperty("Databases")]
        public DatabaseCollection Databases
        {
            get
            {
                return ((DatabaseCollection)(base["Databases"]));
            }
        }
    }

    [ConfigurationCollection(typeof(Component), AddItemName="Component")] 
    public class ComponentCollection : ConfigurationElementCollection
    {        
        protected override ConfigurationElement CreateNewElement()
        {
            return new Component();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((Component)(element)).Name;
        }

        public Component this[int idx]
        {
            get
            {
                return base.BaseGet(idx) as Component;
            }
            set
            {
                if (base.BaseGet(idx) != null)
                {
                    base.BaseRemoveAt(idx);
                }
                this.BaseAdd(idx, value);
            }
        }

        public Component this[string key]
        {
            get
            {
                return base.BaseGet(key) as Component;
            }
            set
            {
                if (base.BaseGet(key) != null)
                {
                    base.BaseRemove(key);
                }
                this.BaseAdd(this.Count, value);
            }
        }
    }

    public class Component : ConfigurationElement
    {
        [ConfigurationProperty("Type", IsRequired = true)]
        public string Type
        {
            get
            {
                return this["Type"] as string;
            }
            set
            {
                this["Type"] = value;
            }
        }

        [ConfigurationProperty("Name", IsRequired = true, IsKey = true)]
        public string Name
        {
            get
            {
                return this["Name"] as string;
            }
            set
            {
                this["Name"] = value;
            }
        }

        [ConfigurationProperty("ServiceName", IsRequired = false)]
        public string ServiceName
        {
            get
            {
                return this["ServiceName"] as string;
            }
            set
            {
                this["ServiceName"] = value;
            }
        }
    }

    [ConfigurationCollection(typeof(Database), AddItemName = "Database")] 
    public class DatabaseCollection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new Database();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((Database)(element)).Name;
        }


        public Database this[int idx]
        {
            get
            {
                return base.BaseGet(idx) as Database;
            }
            set
            {
                if (base.BaseGet(idx) != null)
                {
                    base.BaseRemoveAt(idx);
                }
                this.BaseAdd(idx, value);
            }
        }

        public Database this[string key]
        {
            get
            {
                return base.BaseGet(key) as Database;
            }
            set
            {
                if (base.BaseGet(key) != null)
                {
                    base.BaseRemove(key);;
                }

                this.BaseAdd(this.Count, value);
            }
        }
    }

    public class Database : ConfigurationElement
    {
        [ConfigurationProperty("Name", IsKey = true, IsRequired = true)]
        public string Name
        {
            get
            {
                return this["Name"] as string;
            }
            set
            {
                this["Name"] = value;
            }
        }

        [ConfigurationProperty("Connection", IsKey = false, IsRequired = true)]
        public string Connection
        {
            get
            {
                return this["Connection"] as string;
            }
            set
            {
                this["Connection"] = value;
            }
        }
    }

您需要将配置部分移高一级。

public class Profiles : ConfigurationSection
{
    [ConfigurationProperty("Profile")]
    public ProfileCollection Profile
    {
        get
        {
            return this["profile"] as ProfileCollection;
        }
    }
}    

这是我创建的一个部分。您应该能够通过以下方式让您的工作正常工作:

public class ImportConfiguration : ConfigurationSection
{
    [ConfigurationProperty("importMap")]
    public ImportMapElementCollection ImportMap
    {
        get
        {
            return this["importMap"] as ImportMapElementCollection;
        }
    }
}

public class ImportColumnMapElement : ConfigurationElement
{
    [ConfigurationProperty("localName", IsRequired = true, IsKey = true)]
    public string LocalName
    {
        get
        {
            return this["localName"] as string;
        }
        set
        {
            this["localName"] = value;
        }
    }

    [ConfigurationProperty("sourceName", IsRequired = true)]
    public string SourceName
    {
        get
        {
            return this["sourceName"] as string;
        }
        set
        {
            this["sourceName"] = value;
        }
    }
}

public class ImportMapElementCollection : ConfigurationElementCollection
{
    public ImportColumnMapElement this[object key]
    {
        get
        {
            return base.BaseGet(key) as ImportColumnMapElement;
        }
    }

    public override ConfigurationElementCollectionType CollectionType
    {
        get
        {
            return ConfigurationElementCollectionType.BasicMap;
        }
    }

    protected override string ElementName
    {
        get
        {
            return "columnMap";
        }
    }

    protected override bool IsElementName(string elementName)
    {
        bool isName = false;
        if (!String.IsNullOrEmpty(elementName))
            isName = elementName.Equals("columnMap");
        return isName;
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new ImportColumnMapElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((ImportColumnMapElement)element).LocalName;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

app.config 的自定义配置 - 部分集合? 的相关文章

  • ExecuteNonQueryAsync 并在 SQL 事务中提交

    我正在寻求对我创建的一段代码的帮助 我正在尝试在事务中从 C 进行异步 SQL 调用 例如我可能正在更新或删除表中的行 这是我到目前为止所拥有的 但我似乎无法找到有关在事务中执行此操作的太多信息 根据我在这里所拥有的以及到目前为止我所理解的
  • 如何防止 Parallel.ForEach 循环在运行时更改任务数量?

    我正在使用Parallel ForEach循环做一些工作 我用localInit像这样 localInit gt new foo new Foo bars CreateBars 根据文档 https learn microsoft com
  • 无法使用VS2010 SP1进入.NET框架源代码

    我按照步骤http blogs microsoft co il blogs arik archive 2010 07 12 step into net framework 4 0 source code aspx http blogs mi
  • 使用 C 序列化 double 和 float

    如何在 C 中序列化双精度数和浮点数 我有以下用于序列化短整型 整数和字符的代码 unsigned char serialize char unsigned char buffer char value buffer 0 value ret
  • 如何使用 CMake 链接多个库

    我有一些与 DCMTK 相关的代码 如果我从命令行使用 g 我可以成功构建并运行它 这是代码 include dcmtk config osconfig h include dcmtk dcmdata dctk h int main Dcm
  • 具有 Nhibernate 设计问题的领域模型

    我正在尝试进入 DDD with C 世界 我使用NHibernate作为我的ORM工具 因此尝试开发一个PI Persistence Ignorance 模型 但是 在我的一些实体 表示为 POCOS 中 我的属性设置器中有业务规则 例如
  • 值类型数组如何存储在 .NET 对象堆中?

    在 NET中 诸如int之类的值类型对象存储在内存中 引用类型对象需要为引用和对象单独分配内存 并且对象存储在 NET对象堆中 而Array是在堆中创建的 那么int 等值类型的数组如何存储在堆中呢 这是否意味着值类型对象可以存储在堆中而无
  • 如何更改控制台中的光标位置?

    我想用Console ReadLine 在上一行中并使其显示如下 HeresomeText gt input Not like HeresomeText gt input 可以做吗 使用 Write 方法而不是 WriteLine 方法 C
  • C#:如何计算纵横比

    我对编程比较陌生 我需要根据给定尺寸 例如 axb 计算纵横比 16 9 或 4 3 我如何使用 C 来实现这一点 任何帮助将不胜感激 public string AspectRatio int x int y code am lookin
  • 文件已创建但无法写入

    我的计划 检查Settings txt 文件 如果该文件不存在 则创建文本并自动写入其中 如果 Settings txt 文件已存在 请忽略 不要创建或写入现有文件 我的问题 当文件不存在时 Settings txt 文件会创建 但它是空的
  • 使用 MemoryCache 而不是普通的旧 Dictionary 的令人信服的理由是什么

    我刚刚遇到内存缓存 http msdn microsoft com en us library system runtime caching memorycache aspx这是 NET 4 中的新增功能 我知道如果你想的话它会很有用 限制
  • llvm clang 编译器上的dynamic_cast失败

    我看到一个奇怪的失败dynamic cast正在返回NULL在 clang 编译器上 但相同的代码可以在 gcc 环境下运行 您能否指出根本原因是什么 之间可能有什么区别dynamic cast关于 llvm 和 gcc 我正在使用两个编译
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 访问控制器类中的 appsettings.json 值

    无法弄清楚如何读取startup cs之外的appsettings json值 例如 我想做的是在 Layout cshtml 中 从配置中添加站点名称 例如 ViewData SiteName Configuration GetValue
  • 获取上下文菜单的控制

    我有一个如下所示的上下文菜单 A 1 2 3 选择 1 2 或 3 后 我需要访问调用上下文菜单的对象 意思是如果这是 textbox1 的上下文菜单 那么我需要访问该对象 我该怎么做 忘了说了 这是一个WPF应用程序 所以我使用 Syst
  • Web API 2 c# 中的 Google reCaptcha

    我有一个 ASP NET Web API 2 项目 我正在尝试从表单中读取 Google Captcha 我尝试了这段代码 public string Post FoundingRequest model var response Requ
  • 对数据绑定组合框进行排序的最佳方法是什么?

    我对此做了一些研究 似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序 在本例中为数据集中的数据表 如果是这种情况 那么问题就变成对数据表进行排序的最佳方法是什么 组合框绑定在设计器中设置初始化使用 myCombo DataSou
  • TPL架构问题

    我目前正在开展一个项目 我们面临并行处理项目的挑战 到目前为止没什么大不了的 现在来说说问题 我们有一个 ID 列表 我们定期 每 2 秒 为每个 ID 调用一个 StoredProcedure 需要单独检查每个项目的 2 秒 因为它们是在
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • Windows 安装程序 (C#) 错误代码 2869

    我在 VS 2005 中有一个项目 其中有一个控制台应用程序和一个与安装该应用程序关联的安装项目 我在控制台应用程序中还有一个安装程序类 安装项目将使用它在安装前进行一些验证 这些任务正在检查数据库连接字符串并检查某些目录位置以确保它们在安

随机推荐

  • Python标准库真的标准吗?

    Python 标准库是标准吗 如果安装了 Python 那么标准库也会安装吗 The 文档 reads 对于类 Unix 操作系统 Python 通常作为包的集合提供 因此可能需要使用操作系统提供的打包工具来获取部分或全部可选组件 标准库i
  • PHP 会话的安全性

    我知道这个问题已经被问了数十亿次 但我对我的编码安全性非常偏执 强迫症 我正在做一个小项目 会话数据将仅包含 user id 1 用户名我的用户名 登录 true csrf token87cc51ee94178df79cccce2aebc4
  • 在线程应用程序中准确计时一行代码,C#

    假设应用程序是多线程的 在 C 中对线程或一行代码进行计时的最准确方法是什么 亲切的问候 计时线程 到底是什么意思 要精确计算 以实际时间 某件事需要多长时间 请使用 System Diagnostics Stopwatch 我不相信有任何
  • PHP 中的动态常量名称

    我正在尝试动态创建一个常量名称 然后获取该值 define CONSTANT 1 Some value try to use it dynamically constant number 1 constant name CONSTANT c
  • 在 ASP.Net Boilerplate 中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?

    我将 Asp Net 样板模板与 ASP Net Core 2 1 一起使用 我在 Web Core 程序集中实现了一个集线器并创建了一个控制器 我可以从任何客户端使用我的集线器订阅 通知数据 这不是我的问题 我想在应用程序服务层中使用此集
  • 如何解组 JSON?

    我正在尝试将 JSON 解组为结构 但是 该结构有一个带有标签的字段 使用反射 我尝试查看标签中是否包含字符串 json 如果是这样 那么要解组的 json 应该简单地作为字符串解组到字段中 Example const data I 3 S
  • 使用 jQuery 更新 flashvars 并重新加载 flash

    我想更新 flashvars 值参数以观看另一个视频
  • 我到底如何使用 nginx 和 Gunicorn 为 Django 应用程序提供静态文件服务器?

    现在 我正在尝试遵循本教程 http honza ca 2011 05 deploying django with nginx and gunicorn 模板网站加载正确 但图像未加载 这是我的应用程序的 config py 文件的一部分
  • Android - 激活系统键锁(又名锁屏)

    我必须激活android的系统键锁 当你按下关闭电源 hang up按钮 看这里 我已经浏览过文档 但我发现的一切都是电源管理器 and 键盘锁管理器 两者似乎都不是解决方案 那么 大家知道如何从 Android 应用程序中实现这一点吗 如
  • Javascript 事件处理程序存储在哪里?

    我试图弄清楚 DOM 如何跟踪事件处理程序 无论是通过使用 jQuery addEventListener 还是通过 HTML 属性 例如 onload myFunc 进行绑定 我读到 jQuery 使用 data 方式来存储 jQuery
  • 简单的 div onclick 显示 javascript

    当我点击任何链接时 相应的 div 就会出现 但是当我单击下一个链接时 新单击的潜水以及之前单击的潜水都会显示 我想隐藏之前的 div 新开发请有人帮助我 这是链接的 html 代码 a class hide href First Impr
  • 更改 VS code 中的 java.home 路径

    I just installed java 11 coz VS code was prompting me to update it to java 11 or newer version After installing java 14
  • 如何使用 TarsosDSP 获得 MFCC?

    我到处搜索 但不知道如何在 Android 上使用 TarsosDSP 提取 MFCC 特征 我知道如何从文件中获取 FFT 有什么帮助吗 查看官方github页面 MFCC 测试文件 public class MFCCTest priva
  • 人们对动态语言有何吸引力? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • 如何为 Blazor 页面实现自定义授权过滤器

    Blazor 服务器端 NET Core 3 1 x 查看有关授权的示例 我正在尝试获取自定义授权过滤器 属性的解决方案 我只需要在授权期间检查用户身份 https learn microsoft com en us aspnet core
  • Visual Studio 2017不支持C11新功能_Generic

    谁能告诉我为什么 Visual Studio 2017 不支持 C11 新功能 Generic 我发现这是一个非常有用的功能 但无法在 Visual Studio 2017 中使用 下面是示例代码 include
  • Terraform 在应用时从远程 URL 下载本地文件并在销毁时删除文件

    在创建实际的 lambda 资源之前 我需要从 URL 下载 lambda 存档文件 并且在运行 terraform destroy 时需要删除该文件 基本上是从远程 URL 创建的本地文件资源 我目前使用的是null resource a
  • 在 MATLAB / Octave 中为 n > 100 创建更快的斐波那契函数

    我有一个函数可以告诉我斐波那契数列中的第 n 个数字 问题是 当试图在斐波那契数列中找到更大的数字时 它变得非常慢 有人知道我该如何解决这个问题吗 function f rtfib n if n 1 f 1 elseif n 2 f 2 e
  • Android 共享资源文件夹中的图像

    我正在尝试共享资产文件夹中的图像 我的代码是 Intent share new Intent Intent ACTION SEND share setType image jpg share putExtra Intent EXTRA ST
  • app.config 的自定义配置 - 部分集合?

    我的头实在是太痛了 我以前做过这件事 但没有这么 深入 或复杂 我尝试了不同的方法来实现这一点 但都失败了 所以 这是我想要在 app config 中使用的自定义 XML