C#自定义配置小记

小记Matlab与C#混合编程 最近的项目用到了matlab,但是由于考虑到要与其他的项目合成,所以不能直接用matlab,所以就想到了能不能把matlab写成的函数编译成一个dll,供C#调用,所以网上查了点资料研究了一下matlab与C#的混合编程,记录一下: 首先在matlab中写好你自己实现的函数,例如假设 function result = myTest (paramA, paramB),把你的.m文件编写完以后,在 阅读详情

我们在设计与实现一个应用程序时,往往会将一些常量写入配置文件当中,并且希望这些常量作为一个结构体被整体读写。对此,C#提供的System.Net.Configuration可以帮我们轻松的实现这个需求。本文将介绍几种常见的使用常见及实现,样例代码为.NET framework 4.6.1的控制台程序(如ConfigDemo),配置文件名为App.config。

1. Key-Value配置项

对于一些简单的配置项,我们可以直接将其存储在configuration文件中提供的appSettings当中,该配置段中可存储一系列的键值对配置项,如:

<configuration>
...
    <appSettings>
        <add key="proxy" value="http://example:12345" />
    </appSettings>
...
</configuration>

之后,通过制定Key的值,利用ConfigurationManager读取appSettings中所需的Value,如:

var proxyUrl = ConfigurationManager.AppSettings.Get("proxy");

2. 自定义结构化配置项

对于某些相关联的配置,为了便于管理及使用,我们希望将其放在一个结构体中,并令其作为一个整体被读入应用程序。假设我们在启动应用程的某项服务时,需要提供一个固定的代理服务器地址,此时我们将该信息放置一个自定义的结构体中,以便后续扩展,如:

namespace ConfigDemo
{
    public class MyServiceConfiguration : ConfigurationSection
    {
        private const string SectionName = "myService";
        private const string ProxyProp = "proxy";
        public static readonly MyServiceConfiguration Default;

        static MyServiceConfiguration()
        {
            Default  = (MyServiceConfiguration)ConfigurationManager.GetSection(SectionName);
        }

        [ConfigurationProperty(ProxyProp, IsRequired = true)]
        public string Proxy
        {
            get { return (string)this[ProxyProp]; }
            set { this[ProxyProp] = value; }
        }
    }
}

在配置文件中,我们也需同样将其视为一个整体写入,如:

<configuration>
    <configSection>
        <section name="myService" type="ConfigDemo.MyServiceConfiguration, ConfigDemo"/>
    </configSection >

    <myService proxy="http://example:12345" />
...
</configuration>

3. 自定义数组类结构配置项

有些时候我们需要一系列相同结构,但值不同的配置项,即类似数组结构的配置项。此时,除了ConfigraionSection,我们还需用到ConfigurationElement和ConfigurationCollection,如:

//ConfigurationElement
namespace ConfigDemo.Configurations
{
    public class MyProxy : ConfigurationElement
    {
        private const string EnvProp = "env";
        private const string ProxyProp = "proxy";

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

        [ConfigurationProperty(ProxyProp, IsRequired = true)]
        public string Proxy
        {
            get { return (string)this[ProxyProp]; }
            set { this[ProxyProp] = value; }
        }
    }
}
//ConfigurationElementCollection
namespace ConfigDemo.Configurations
{
    public class MyProxyCollection : ConfigurationElementCollection
    {
        // <inheritdoc />
        protected override ConfigurationElement CreateNewElement() => new MyProxy();
        
        // <inheritdoc />
        protected override object GetElementKey(ConfigurationElement element) => ((MyProxy)element).Env;
    }
}
//ConfigurationSection
namespace ConfigDemo.Configurations
{
    public class MyProxyConfiguration : ConfigurationSection
    {
        private const string MyProxiesProp = "myProxies";
        
        [ConfigurationProperty(MyProxiesProp, IsRequired = true)]
        public MyProxyCollection MyProxies
        {
            get { return (MyProxyCollection)base[MyProxiesProp]; }
            set { base[MyProxiesProp] = value; }
        }
    }
}

此处,我们在实现一个单独辅助类来读取上述配置,以代码更加简洁清晰,如:

//ConfigurationSection
namespace ConfigDemo
{
    public class MyProxyHelper
    {
        private const string SectionName = "myProxyHelper";
        private static readonly List<MyProxy> Proxies;

        static MyProxyHelper()
        {
            var config = (MyProxyConfiguration)ConfigurationManager.GetSection(SectionName);
            Proxies = config.MyProxies.Cast<MyProxy>().ToList();
        }

        public string GetByEnv(string env) => Proxies.SingleOrDefualt(x => x.Env == env);
    }
}

在配置文件中,我们也需同样将其视为一个数组整体写入,如:

<configuration>
    <configSection>
        <section name="myProxyHelper" type="ConfigDemo.Configurations.MyProxyConfiguration, ConfigDemo"/>
    </configSection >

    <myProxyHelper>
        <myProxies>
            <add env="dev" proxy="http://exampedev:12345" />
            <add env="fat" proxy="http://exampeuat:12345" />
        </myProxies>
    </myProxyHelper>
...
</configuration>

 

小记 | ikvm调试的血汗泪 文章目录背景环境过程初尝试步骤结果原因再尝试:升级ikvm步骤结果原因再再尝试:降级jdk步骤结果最后 下面是某小白的瞎逼逼,不具备任何参考价值 背景 最近一直在做的语音识别系统开始收尾,客户端服务端功能已经做好(Java),客户端界面也搭建好(C#),最后一步把界面和功能捆绑就万事大吉了! 当初在考虑用VS2012的WFC做界面时,大致搜了一下,确保C#是有办法使用Java类的,于是就大胆... 阅读详情

相关推荐

1、CsvHelper使用小记一

一款c#下操作CSV文件的小工具,可以很轻松的对csv文件进行读写,本篇只介绍了下读数据,及相关的设置

roujian0985的博客 4725

C# Linq

A和B是相同类型的引用类型集合,如果A和B的id字段相同,就把 A.Name =B.Name; 用Linq怎么写? class Person { /// <inheritdoc /> public override string ToString() { return string.Format("ID: {0}, Name: {1}", ...

绀目澄清 352

20200526小记——C#WPF资源词典XAML实现多种语言

C#中实现要多种语言,网上很多介绍都是利用resx资源文件以及C#自带的CultureInfo类来实现,而且resx资源文件对于图像、图标、音频和视频等资源都可以更新替换,实现更多的内容。而对于某些程序来说,可能只要简单一些文字翻译即可,这里介绍一种利用资源词典实现多语言支持。 首先,在主项目下新建文件夹Language,在Language文件夹下建立两个资源词典文件cn.xaml和en.xaml作为用到的文本做多种语言版本。并在XAML文件中编写你所用到的文本。 <ResourceDict

叶舞枝头 凤翔云空 987

C# 用真实需求,手把手教你写面向对象的代码

好久没写过文章了,这里工作很忙。 今天继续给大家讲解下,怎么写面向对象的代码。之前也写过类似的文章,但那都是随便举的例子,不是活生生的现实案例。 今天使用我刚写的项目来举例子,它是真实存在的需求案例,引领大家一步一步写面向对象代码。 号外:各位看到文档不要惊慌,我也是第一次接触这个文档,也不懂这些需求,就是纯看英文文档写出来的代码,跟你们没有两样,我对它的业务也是不懂的。 一、首先,先仔细看下需求文档,需求文档是英文的,相信大家大体能看懂,需求是截取的片段。 二、实现第一段需求 本需求截图如下,该需

C#开发 3925

C#中调用点云库PclSharp_Justin Bruening完整教程vs2019

我的配置环境为vs2019,.netframework4.5 打开网址 https://www.nuget.org/packages/PclSharp/ 下载到本地 然后在vs中安装 工具——NuGet包管理器——程序包管理器设置 看到这个目录,打开这个目录 然后新建“PclSharp”这个文件夹,将下载的pclsharp.1.8.1.20180820-beta07.nupkg文件放入文件下 然后打开控制台 窗口输入 Install-Package PclSh..

大胡子大叔的专栏 8998

InheritDoc:允许添加C#中XML注释的标签

允许在C#源代码的XML注释中添加<inheritdoc>标记,以从基类,接口和类似方法继承XML注释。 消除不必要的复制和粘贴重复的XML注释,并自动保持XML注释同步。 XML注释(以///开头)通过常规构建过程被编译成每个程序集的XML文档文件。 InheritDoc后处理这些XML文档文件以根据需要继承XML注释。 这种方法使XML注释与其他文档工具兼容,可以通过Intellisense访问,并且可以在分发库时打包到Nuget包中。 这是命令行版本(InheritDocLib在.NET程序集中包含相同的功能,用于程序访问)。 有关更多详细信息,请参见 。

C#自定配置文件(一)

C#自定义配置文件 .NET程序中,经常使用Config文件来配置应用程序中经常使用的值,比如数据库连接字符串。最近项目遇到一个需要配置好多节点在配置文件中的需求。为了使配置节点整洁易维护,在代码调用时也保证获取时比较直观,结合自定义配置文件专门整理了一个配置文件帮助类Demo。此篇文章主要讲述自定义配置文件的使用方法。 常见配置文件使用方法 直接在connectionStrings\appSettings这两个节点中添加add节点配置 这种方式在项目中很常见,使用简单,这里不做介绍 文件操作

🔥 IceToad 冰蟾 | .NET魔法师 | 代码界的灭霸 🚀白天是拯救需求于水火的工程师,夜晚是开源项目的肝帝,代码洁癖晚期,却对咖啡因毫无抵抗力 🤖把踩坑日记写成《百科全书》 📢 坚信知识不是魔法,分享才能幻影移形 4644

为什么你的单细胞数据总有问题?可能是忽略了scDblFinder这个神器

本文深入剖析了单细胞数据分析中异质性双细胞这一常见但易被忽视的痛点,并重点介绍了scDblFinder这一神器。scDblFinder通过机器学习模型,能精准识别并过滤同一样本内的异质性双细胞,有效解决其导致的聚类模糊、信号混淆等问题,从而显著提升数据洁净度与下游分析结果的可靠性。

brandy的博客 452

私人工具集1——C#自定义配置类(Config)

c# 常用工具集——配置

redAnt的博客 2957

ros2的unity仿真配置(ros2-for-unity)

可以看到unity中输出了Hello World,验证完毕!可以看到unity上监听的/chatter。

m0_63671696的博客 4093

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 317

VSCode C# 配置小记

写在前面的话: 虽说vs是公认最强大的c#工具。但很多时候我只想在本地跑几个简单的测试样例,这时候用vs未免有些累人。于是乎想到了在vscode上再配置一个c#环境。而因为我用vs预装了sdk,所以以下步骤会和网络上其他教程多少有些出入。 一、插件安装: 这里网络上推荐的一般都是 c#,c#fixformat,c# extensions 第一个和第三个一下就看到了。但是第二个怎么找都没有。稍微查了一下第二个的作用,发现大概就是语法检查。于是我试着先用了一下列表中的Kite AtuoComplete-AI C

Air_cat的博客 575

从PX4的FRD到Mavros的FLU:手把手教你正确配置`setpoint_raw/local`话题发布无人机目标点

本文详细解析了PX4的FRD与Mavros的FLU坐标系转换问题,手把手教你正确配置`setpoint_raw/local`话题发布无人机目标点。通过实战指南和常见错误排查,帮助开发者避免方向错乱问题,提升无人机控制精度。

weixin_33712987的博客 422

C#小记

C#小记 1.textbox限制只输入数字 要重新定义一个KeyPress函数 private void textBox4_KeyPress(object sender, KeyPressEventArgs e) { ...

Chandler2014的博客 207

MiniMax H3本地部署实战:ComfyUI整合包安装与提速插件验证指南

在AIGC工具链快速演进的当下,本地部署内容生成模型成为许多创作者和开发者的关注焦点。本地部署意味着数据不出本机、可按需定制工作流,还能规避云端排队与外部依赖,其核心价值在于为内容生产提供可控、私密且可编程的生成环境。ComfyUI作为模块化节点式AI绘画工具,凭借灵活的工作流编排和API接口能力,成为承载这类模型的热门平台。MiniMax H3作为支持文本、参考图等多种输入的内容生成模型,与ComfyUI结合后,既适合个人进行概念验证,也能用于团队私有化流程搭建。实际落地过程中,中文整合包显著降低了环境配

weixin_29042035的博客 293

你不必懂AI,但必须会用AI:写给所有焦虑中的职场人

AI时代不必焦虑学技术,关键在于用AI解决实际问题。文章指出,99%的人只需成为AI使用者而非建造者,核心竞争力在于结合业务痛点运用AI工具提升效率。与其盲目学习工具,不如梳理工作流程,识别可优化环节,让AI赋能重复性、标准化任务。行业经验与AI工具的结合才是真正的职场护城河。建议从具体工作场景出发,寻找匹配的AI解决方案,迈出应用第一步。

hundred98的博客 715

C# winForm MDI使用小记

代码没能带回来,博文是在linux平台写的,有些名字没记牢,会有出入,attention 1,首先,父窗口要设置isenablemdi属性。实现MDI结构的父子窗口套用,最重要的是在父窗口实例化自窗口(例frmForm),(名字好像有些错误)FrmForm frmFom=new FrmForm();frmForm.parent=this; 2,关于自窗口在父窗口中的

Think 专栏 4413

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5086

C# 机房重构之小记

前言 继上次的总结之后,这几天又有了一些收获,感觉都是自己不是很清楚的地方,但是我还是觉得弄清楚这些东西是挺重要的,还有一方面就是每天看着他,但是还不知道是怎么回事儿,是干啥的,就很是难受,所以进行了小小的总结,也算是取出自己的一块心病吧!下面和大家分享一下我的收获! 分享 【1】为什么用了using System.Data,还要用using System.Data.SqlClient? ①Sys...

听一首歌♫ 377

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025 (以YOLOv26最新目标检测模型为基础,利用C3k2_MambaOut创新模块进行改进)

2502_91881744的博客 223

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

工作小记

C#中使用PowerShell:Process process = new Process();                // Redirect the output stream of the child process.                process.StartInfo.UseShellExecute = true;                proc

yjf512的专栏 874

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Debug和Trace配置小记

使用配置文件(.config)可以轻松地配置程序,并且不用再次编译程序。 在.Net配置文件(.config)中像Debug/Trace这样的调试/追踪信息在<system.diagnostics>一节(父元素Configuration)中。 在<system.diagnostics>可以配置的子项有: <assert>元素,控制断言失...

a310805的博客 487

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WebAPI小记

新建WebAPI项目 新建一个Model 安装Entity Framework 添加连接字符串 去Web.config 中 <configuration> 节点中最下面添加 在Word中编辑的,没有太好呈现代码的东西,直接截图,见谅。 添加ProductContext.cs类 添加 Product...

weixin_30414155的博客 94

C#学习(九)之Windows Store App & WP 开发小记(一)

  由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获。 一、数据库(Sqlite)的使用     虽然资料很难找,但sqlite在这两个平台的使用还是很简单的。   首先是环境配置阶段:  1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要...

weixin_33968104的博客 257

C#-单元测试简单实例和封装EF_BaseDal小记

VS2015创建项目使用.net版本为.net frame... 添加新的项目,选择测试中的单元测试项目...VS中有个非常有用的功能,...

MrLsss的博客 785

C#使用OracleClient连接Oracle数据库小记

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34128839的博客 1123
上一篇: Microsoft Graph小记之应用开发
下一篇: 利用LINQ实现简单的异步并发
lxf310
博客等级 码龄17年 26粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值