【風語·深藍 】.NET 2.0的自定義配置檔案體系初探
以前在1.1.的時代我們為了寫一個自定義配置,需要實現System.Configuration.IConfigurationSectionHandler介面,然後用System.Configuration.ConfigurationSettings.AppSettings.Get()方法去獲取配置內容。在實現System.Configuration.IConfigurationSectionHandler的過程中會進行大量繁瑣的XML節操作,如果希望Get()方法返回一個強型別的配置實體物件,還需要寫一個相應的類。這些工作枯燥而且工作量很大,特別是在一個配置很複雜的時候。
並且,1.1中的配置檔案對於程式來說是隻讀的,若配置檔案一旦發生改變怎會引發應用程式重啟。
而現在,2.0提供了全新的自定義配置檔案構建方式,支援強型別的配置屬性,並提供了程式碼對配置檔案進行動態修改的機制。我對其作了一些初步的研究,在這裡拋磚引玉了。
並且,1.1中的配置檔案對於程式來說是隻讀的,若配置檔案一旦發生改變怎會引發應用程式重啟。
而現在,2.0提供了全新的自定義配置檔案構建方式,支援強型別的配置屬性,並提供了程式碼對配置檔案進行動態修改的機制。我對其作了一些初步的研究,在這裡拋磚引玉了。
- 首先我們來看看最簡單的情況如何處理:
xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RemotingCompress" type="Xrinehart.Framework.CommSupport.Section.RemotingCompressSection, ConfigManagement"
allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true"/>
configSections>
<RemotingCompress CompressLevel="DEFAULT_COMPRESSION" CompressCacheSize="1024" UnCompressCacheSize="1024" MinCompressSize="0">
configuration>
只有一個配置節:RemotingCompress,擁有4個屬性CompressLevel、CompressCacheSize、UnCompressCacheSize、MinCompressSize。
我們需要實現一個從System.Configuration.ConfigurationSection基類繼承的配置類,在2.0裡配置資訊實體和配置識別都在一個類中,我們先來看程式碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
namespace Xrinehart.Framework.CommSupport.Section
{
/**////
/// 壓縮率級別的列舉
///
public enum Deflater
{
/**////
/// 最佳壓縮效果, 速度慢
///
BEST_COMPRESSION = 9,
/**////
/// 預設壓縮率, 壓縮速度比最高(推薦)
///
DEFAULT_COMPRESSION = -1,
/**////
/// 強化壓縮率,速度較慢
///
DEFLATED = 8,
/**////
/// 最佳速度壓縮率,速度最快(寬頻推薦)
///
BEST_SPEED = 1,
/**////
/// 不壓縮
///
NO_COMPRESSION =0
};
/**////
/// RemotingCompress配置節類
///
public sealed class RemotingCompressSection : System.Configuration.ConfigurationSection
{
// 該配置檔案只讀
private static bool _ReadOnly = true;
public RemotingCompressSection()
{
}
private new bool IsReadOnly
{
get
{
return _ReadOnly;
}
}
private void ThrowIfReadOnly(string propertyName)
{
if (IsReadOnly)
throw new ConfigurationErrorsException(
"The property " + propertyName + " is read only.");
}
protected override object GetRuntimeObject()
{
// To enable property setting just assign true to
// the following flag.
_ReadOnly = true;
return base.GetRuntimeObject();
}
所有配置屬性#region 所有配置屬性
/**////
/// 配置節屬性:壓縮率級別(可選)
///
[ConfigurationProperty("CompressLevel", DefaultValue = "DEFAULT_COMPRESSION", Options = ConfigurationPropertyOptions.None)]
public Deflater CompressLevel
{
get
{
return (Deflater)this["CompressLevel"];
}
set
{
ThrowIfReadOnly("CompressLevel");
this["compressLevel"] = value;
}
}
/**////
/// 配置節屬性:壓縮時緩衝區大小(可選)
///
[ConfigurationProperty("CompressCacheSize", DefaultValue = (Int32)40960, Options = ConfigurationPropertyOptions.None)]
[IntegerValidator(MinValue = 1024, MaxValue = 1024 * 1024, ExcludeRange = false)]
public int CompressCacheSize
{
get
{
return (Int32)this["CompressCacheSize"];
}
set
{
ThrowIfReadOnly("CompressCacheSize");
this["CompressCacheSize"] = value;
}
}
/**////
/// 配置節屬性:解壓時緩衝區大小(可選)
///
[ConfigurationProperty("UnCompressCacheSize", DefaultValue = (Int32)40960, Options = ConfigurationPropertyOptions.None)]
[IntegerValidator(MinValue = 1024, MaxValue = 1024 * 1024, ExcludeRange = false)]
public int UnCompressCacheSize
{
get
{
return (Int32)this["UnCompressCacheSize"];
}
set
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-343353/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php 自定義配置檔案PHP
- Yii自定義配置檔案存放方法
- docker Redis 自定義配置檔案啟動DockerRedis
- 快速自定義Cordova外掛(-配置檔案)
- 使用配置檔案自定義AWS Elastic BeanstalkASTBean
- SpringBoot讀取自定義配置檔案Spring Boot
- golang 使用 viper 讀取自定義配置檔案Golang
- springboot如何使用自定義配置檔案Spring Boot
- ASP.NET Core - 配置系統之自定義配置提供程式ASP.NET
- 【ASP.NET Core】自定義的配置源ASP.NET
- Asp.Net2.0實現自定義樣式ASP.NET
- springboot讀取自定義配置檔案節點Spring Boot
- docker最新版本如何自定義配置檔案Docker
- 如何自定義 CI/CD 配置檔案中的輸入引數?
- .NET Core - 自定義專案模板
- 使用 setenv 配置檔案管理 Tomcat 的自定義環境變數Tomcat變數
- ASP.NET Core 2.0 自定義 _ViewStart 和 _ViewImports 的目錄位置ASP.NETViewImport
- DesignBuilder自定義材料檔案UI
- kubernetes部署mongoDB 單機版 自定義配置檔案、密碼、日誌路徑等MongoDB密碼
- 使用docker執行nginx服務,掛載自定義配置檔案DockerNginx
- ASP.NET系列:自定義配置節點的複用ASP.NET
- 使用stub快速生成自定義檔案
- XCode 建立自定義檔案模版XCode
- ASP.NET Core 1.0 靜態檔案、路由、自定義中介軟體、身份驗證簡介ASP.NET路由
- Flutter自定義繪製Widget初探Flutter
- .NET Core 自定義中介軟體 Middleware
- ASP.NET Core - 自定義中介軟體ASP.NET
- 關於mybatis生成外掛Generator配置檔案中自定義註釋MyBatis
- 加密(Asp.Net配置檔案的)配置節加密ASP.NET
- .net core使用配置檔案
- [分享]laravel自定義檔案系統,以企鵝家cos為例Laravel
- oracle sqldeveloper下 自定義Snippets檔案的替換OracleSQLDeveloper
- Nginx配置檔案的語法格式Nginx
- Laravel 實現自定義生成檔案命令Laravel
- iOS自定義log並寫入檔案iOS
- MySQL8.0 For Windows 安裝教程(自定義配置檔案、密碼方式修改)MySqlWindows密碼
- 能自定義風扇轉速嗎?風扇轉速控制軟體推薦~
- .NET 隱藏/自定義windows系統游標Windows