


.Net 構成ファイル - ConfigurationSection を継承してカスタム構成ノードを処理するカスタム処理クラスを実装します。
IConfigurationSectionHandlerを継承するメソッドを使用してカスタムノードを処理するクラスを定義するほかに、ConfigurationSectionクラスを継承することでも同様の効果を得ることができます。
まず最初に、.Net 設定ファイルの暗黙のルールについて話しましょう
ノードを設定するとき、パラメータ データを保存するには 2 つの方法があります。1 つは、パラメータ データをノードのプロパティに保存する方法です。ノード、もう一方はノードのテキストに保存されます。
ノードには多くの属性を持つことができますが、内部テキストは1つしかないため、プログラム内でこれら2つの形式を区別すると複雑になります。 この問題を回避するために、.netの設定ファイルはinnertext.
ではなく属性とともにのみ保存されます。次に、に準拠するカスタムコードを書きましょうこの暗黙のルールに従って、テストを容易にするための設定ファイルを定義します:
<mailServerGroup provider="www.baidu.com"> <mailServers> <mailServer client="http://blog.csdn.net/lhc1105" address="13232@qq.com" userName="lhc" password="2343254"/> <mailServer client="http://blog345.csdn.net/lhc1105" address="132wdfgdsggtaewg32@qq.com" userName="dfshs水田如雅" password="2334t243的萨芬234254"/> <mailServer client="http://blog436.csdn.net/lhc1105" address="132wdgadsfgdtaewg32@qq.com" userName="sdfhdfs水田如雅" password="23ewrty2343的萨芬234254"/> <mailServer client="http://blo345734g.csdn.net/lhc1105" address="132wdgdfagdstaewg32@qq.com" userName="sdfher水田如雅" password="23erwt43的萨芬234254"/> </mailServers> </mailServerGroup>
次に、対応する処理クラスを記述します。ここでは、内側から外側に向かって記述します:
最初は最も内側の mailServer です。 :
/// <summary> /// Class MailServerElement:用于映射mailServer节点,这里是实际存储数据的地方; /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 21:51:57</remarks> public sealed class MailServerElement : ConfigurationElement //配置文件中的配置元素 { /// <summary> /// Gets or sets the client. /// </summary> /// <value>The client.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:40</remarks> [ConfigurationProperty("client", IsKey = true, IsRequired = true)] //client是必须的key属性,有点儿主键的意思,例如,如果定义多个client相同的节点,循环读取的话就只读取到最后一个值 public string Client { get { return this["client"] as string; } set { this["client"] = value; } } /// <summary> /// Gets or sets the address. /// </summary> /// <value>The address.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:38</remarks> [ConfigurationProperty("address")] public string Address { get { return this["address"] as string; } set { this["address"] = value; } } /// <summary> /// Gets or sets the name of the user. /// </summary> /// <value>The name of the user.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:35</remarks> [ConfigurationProperty("userName")] public string UserName { get { return this["userName"] as string; } set { this["userName"] = value; } } /// <summary> /// Gets or sets the password. /// </summary> /// <value>The password.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:33</remarks> [ConfigurationProperty("password")] public string Password { get { return this["password"] as string; } set { this["password"] = value; } } }
次に、mailServers のコレクションである mailServers があります:
/// <summary> /// Class MailServerCollection:映射mailServers节点,为一个集合类,另外还包含了很多对节点的操作方法,大部分继承自ConfigurationElementCollection /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 21:52:00</remarks> public sealed class MailServerCollection : ConfigurationElementCollection { /// <summary> /// 获取 <see cref="T:System.Configuration.ConfigurationElementCollection" /> 的类型。 /// </summary> /// <value>The type of the collection.</value> /// <returns>此集合的 <see cref="T:System.Configuration.ConfigurationElementCollectionType" />。</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:08</remarks> public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.BasicMap; } } /// <summary> /// 当在派生的类中重写时,创建一个新的 <see cref="T:System.Configuration.ConfigurationElement" />。 /// </summary> /// <returns>新的 <see cref="T:System.Configuration.ConfigurationElement" />。</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:03</remarks> protected override ConfigurationElement CreateNewElement() { return new MailServerElement(); } /// <summary> /// 在派生类中重写时获取指定配置元素的元素键。 /// </summary> /// <param name="element">要为其返回键的 <see cref="T:System.Configuration.ConfigurationElement" />。</param> /// <returns>一个 <see cref="T:System.Object" />,用作指定 <see cref="T:System.Configuration.ConfigurationElement" /> 的键。</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:04:51</remarks> protected override object GetElementKey(ConfigurationElement element) { return (element as MailServerElement).Client; } /// <summary> /// 获取在派生的类中重写时用于标识配置文件中此元素集合的名称。 /// </summary> /// <value>The name of the element.</value> /// <returns>集合的名称;否则为空字符串。默认值为空字符串。</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 23:41:40</remarks> protected override string ElementName { get { return "mailServer"; } } /// <summary> /// 获取集合中的元素数。 /// </summary> /// <value>The count.</value> /// <returns>集合中的元素数。</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:08:24</remarks> public new int Count { get { return base.Count; } } /// <summary> /// 获取或设置此配置元素的属性、特性或子元素。 /// </summary> /// <param name="index">The index.</param> /// <returns>MailServerElement.</returns> /// <remarks>Editor:v-liuhch</remarks> public MailServerElement this[int index] { get { return BaseGet(index) as MailServerElement; } set { if (BaseGet(index) != null) { BaseRemoveAt(index); } BaseAdd(index, value); } } /// <summary> /// 获取或设置此配置元素的属性、特性或子元素。 /// </summary> /// <param name="Name">The name.</param> /// <returns>MailServerElement.</returns> /// <remarks>Editor:v-liuhch</remarks> new public MailServerElement this[string Name] { get { return BaseGet(Name) as MailServerElement; } } /// <summary> /// Indexes the of. /// </summary> /// <param name="element">The element.</param> /// <returns>System.Int32.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:24:16</remarks> public int IndexOf(MailServerElement element) { return BaseIndexOf(element); } /// <summary> /// Adds the specified element. /// </summary> /// <param name="element">The element.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:26:06</remarks> public void Add(MailServerElement element) { BaseAdd(element); } /// <summary> /// Removes the specified element. /// </summary> /// <param name="element">The element.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:27:01</remarks> public void Remove(MailServerElement element) { if (BaseIndexOf(element) > 0) { BaseRemove(element.Client); } } /// <summary> /// Removes at. /// </summary> /// <param name="index">The index.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:33:29</remarks> public void RemoveAt(int index) { BaseRemoveAt(index); } /// <summary> /// Removes the specified client. /// </summary> /// <param name="client">The client.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:34:04</remarks> public void Remove(string client) { BaseRemove(client); } /// <summary> /// Clears this instance. /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:34:29</remarks> public void Clear() { BaseClear(); } }
最後に、最も外側のグループ:
/// <summary> /// Class MailServerSection 为入口: /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 21:41:02</remarks> public class MailServerSection : ConfigurationSection //继承配置文件中节 { /// <summary> /// Gets the provider.:映射mailServerGroup节点的provider /// </summary> /// <value>The provider.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:59</remarks> [ConfigurationProperty("provider", IsKey = true)] public string provider { get { return this["provider"] as string; } } /// <summary> /// Gets or sets the mail servers.:映射新添加的节点mailServers节点;这个节点下还包含了若干个mailServer节点,因此它是一个集合类 /// </summary> /// <value>The mail servers.</value> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 22:05:56</remarks> [ConfigurationProperty("mailServers", IsDefaultCollection = false)] public MailServerCollection MailServers { get { return this["mailServers"] as MailServerCollection; } set { this["mailServers"] = value; } } }
同様に、関連する処理クラスとノード:
<section name="mailServerGroup" type="继承ConfigurationSection基类.MailServerSection,继承ConfigurationSection基类"/> </configSections>
それからテストをしてください:
class Program { static void Main(string[] args) { Test(); } /// <summary> /// Tests this instance.:读取节点值示例 /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/27 23:04:53</remarks> private static void Test() { MailServerSection mailSection = (MailServerSection)ConfigurationManager.GetSection("mailServerGroup"); Console.WriteLine("MailServerSection 的provider属性值:"+mailSection.provider); foreach (MailServerElement config in mailSection.MailServers) { Console.WriteLine("----------------------------------"); Console.WriteLine("client值为:"+config.Client); Console.WriteLine("address值为:"+config.Address); Console.WriteLine("username值为:"+config.UserName); Console.WriteLine("password值为:"+config.Password); Console.WriteLine("----------------------------------"); } Console.ReadKey(); } }
もともと結果の写真をアップロードしたかったのですが、インターネットの速度が遅いので、忘れてください、遊びが好きな子供たちは実行できます結果そのもの。 。 。 。 。
上記は .Net 構成ファイルの内容です - カスタム構成ノードを処理するためのカスタム処理クラスを実装するために ConfigurationSection を継承します。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











携帯電話会社からラップトップを購入した場合は、eSIM をアクティベートし、携帯電話ネットワークを使用してコンピューターをインターネットに接続するオプションがある可能性があります。 eSIM を使用すると、すでに内蔵されているため、ラップトップに別の物理 SIM カードを挿入する必要はありません。デバイスがネットワークに接続できない場合に非常に便利です。 Windows 11 デバイスが eSIM と互換性があるかどうかを確認するにはどうすればよいですか? [スタート] ボタンをクリックし、[ネットワークとインターネット] > [携帯電話] > [設定] に移動します。 「セルラー」オプションが表示されない場合は、デバイスに eSIM 機能がないため、モバイル デバイスを使用してラップトップをホットスポットに接続するなど、別のオプションを確認する必要があります。アクティベートするには、そして

構成ファイルの固定ファイルを記述する必要があるのはなぜですか? settings.py や config.py などの .py ファイルとして直接記述することができます。この利点は、インポートを通じてその一部を直接インポートできることです。同じプロジェクト; しかし、それを他のプロジェクトで使用する必要がある場合 Python 以外のプラットフォームで構成ファイルを共有する場合、単一の .py を記述することは良い選択ではありません。現時点では、これらの固定部分を保存するために共通の構成ファイルの種類を選択する必要があります。現在、一般的に使用されている一般的な構成ファイル形式のタイプには、主に ini、json、toml、yaml、xml などが含まれます。これらのタイプの構成ファイルには、標準ライブラリまたはサードパーティ ライブラリを通じてアクセスできます。

ワイヤレス ネットワークのセットアップは一般的ですが、ネットワークの種類の選択または変更は、特に結果が分からない場合には混乱する可能性があります。 Windows 11 でネットワークの種類をパブリックからプライベートに、またはその逆に変更する方法についてのアドバイスをお探しの場合は、役立つ情報をお読みください。 Windows 11 のさまざまなネットワーク プロファイルとは何ですか? Windows 11 には、多数のネットワーク プロファイルが付属しています。これらのプロファイルは、基本的に、さまざまなネットワーク接続を構成するために使用できる設定のセットです。これは、自宅やオフィスに複数の接続がある場合に便利で、新しいネットワークに接続するたびにすべてを設定する必要がありません。プライベート ネットワーク プロファイルとパブリック ネットワーク プロファイルは Windows 11 の 2 つの一般的なタイプですが、一般的には

最近、多くの Win10 システム ユーザーがユーザー プロファイルを変更したいと思っていますが、その方法がわかりません。この記事では、Win10 システムでユーザー プロファイルを設定する方法を説明します。 Win10 でユーザー プロファイルを設定する方法 1. まず、「Win+I」キーを押して設定インターフェイスを開き、クリックして「システム」設定に入ります。 2. 次に、開いたインターフェースで、左側の「バージョン情報」をクリックし、「システムの詳細設定」を見つけてクリックします。 3. 次に、ポップアップ ウィンドウで「」オプション バーに切り替え、下の「ユーザー構成」をクリックします。

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

Helm は Kubernetes の重要なコンポーネントであり、構成ファイルを HelmChart というパッケージにバンドルすることで Kubernetes アプリケーションのデプロイを簡素化します。このアプローチにより、複数のファイルを変更するよりも単一の構成ファイルを更新する方が便利になります。 Helm を使用すると、ユーザーは Kubernetes アプリケーションを簡単にデプロイできるため、デプロイメント プロセス全体が簡素化され、効率が向上します。このガイドでは、Ubuntu に Helm を実装するさまざまな方法について説明します。注: 次のガイドのコマンドは、Ubuntu 22.04、すべての Ubuntu バージョン、および Debian ベースのディストリビューションに適用されます。これらのコマンドはテストされており、システム上で正しく動作するはずです。 Uで

構成ファイルを記述する理由? 開発プロセスでは、多くの場合、いくつかの固定パラメーターまたは定数を使用します。これらのより固定された一般的に使用される部分については、さまざまなモジュール コードでの繰り返しを避け、コア コードをクリーンに保つために、多くの場合、固定ファイルに書き込まれます。この修正されたファイルを settings.py や config.py などの .py ファイルに直接書き込むことができます。この利点は、同じプロジェクト内のインポートを通じてその一部を直接インポートできることです。他の非 Python プラットフォーム上 ファイル共有を構成する場合、単一の .py を記述することは適切な選択ではありません。現時点では、一般的な構成ファイルの種類を選択する必要があります。
