更新:2007 年 11 月
命名空间:
System.Configuration 程序集:
System.Configuration(在 System.Configuration.dll 中)
Public MustInherit Class ConfigurationSection _
Inherits ConfigurationElement
Dim instance As ConfigurationSection
public abstract class ConfigurationSection : ConfigurationElement
public ref class ConfigurationSection abstract : public ConfigurationElement
public abstract class ConfigurationSection extends ConfigurationElement
public abstract class ConfigurationSection extends ConfigurationElement
可以使用 ConfigurationSection 类实现自定义的节类型。扩展 ConfigurationSection 类,以提供对自定义配置节的自定义处理和编程访问。
节使用 configSections 元素中的项注册其处理类型。有关示例,请参见示例部分中所示的配置文件节选。
说明: |
|---|
在早期版本的 .NET Framework 中,配置节处理程序用于通过编程方式对配置设置进行更改。现在,所有的默认配置节都由扩展 ConfigurationSection 类的类来表示。 |
对实现者的说明:可以使用编程或声明性(属性化)代码编写模型创建自定义配置节:
编程模型。此模型要求为每个节属性 (Attribute) 创建一个用于获取或设置其值的属性 (Property),并将其添加到基础 ConfigurationElement 基类的内部属性 (Property) 包中。
声明性模型。此模型(也称为属性化模型)相对简单,它允许您使用属性 (Property) 定义一个节属性 (Attribute),并通过属性 (Attribute) 对该节属性进行修饰。这些属性 (Attribute) 将属性 (Property) 类型及其默认值通知给 ASP.NET 配置系统。利用通过反射获取的此信息,ASP.NET 配置系统将创建节属性对象并执行所需的初始化。
Configuration 类允许进行编程访问以编辑配置文件。可以按如下方式访问这些文件以进行读取或写入。
下面的示例演示如何通过编程方式实现自定义节。
有关演示如何实现和使用通过属性化模型实现的自定义节的完整示例,请参见 ConfigurationElement。
' Define a custom section.
' The CustomSection type allows to define a custom section
' programmatically.
NotInheritable Public Class CustomSection
Inherits ConfigurationSection
' The collection (property bag) that contains
' the section properties.
Private Shared _Properties As ConfigurationPropertyCollection
' Internal flag to disable
' property setting.
Private Shared _ReadOnly As Boolean
' The FileName property.
Private Shared _FileName As New ConfigurationProperty( _
"fileName", GetType(String), _
"default.txt", _
ConfigurationPropertyOptions.IsRequired)
' The MaxUsers property.
Private Shared _MaxUsers As New ConfigurationProperty( _
"maxUsers", GetType(Long), _
CType(1000, Long), _
ConfigurationPropertyOptions.None)
' The MaxIdleTime property.
Private Shared _MaxIdleTime As New ConfigurationProperty( _
"maxIdleTime", GetType(TimeSpan), _
TimeSpan.FromMinutes(5), _
ConfigurationPropertyOptions.IsRequired)
' CustomSection constructor.
Public Sub New()
' Property initialization
_Properties = _
New ConfigurationPropertyCollection()
_Properties.Add(_FileName)
_Properties.Add(_MaxUsers)
_Properties.Add(_MaxIdleTime)
End Sub 'New
' This is a key customization.
' It returns the initialized property bag.
Protected Overrides ReadOnly Property Properties() _
As ConfigurationPropertyCollection
Get
Return _Properties
End Get
End Property
Private Shadows ReadOnly Property IsReadOnly() As Boolean
Get
Return _ReadOnly
End Get
End Property
' Use this to disable property setting.
Private Sub ThrowIfReadOnly(propertyName As String)
If IsReadOnly Then
Throw New ConfigurationErrorsException( _
"The property " + propertyName + " is read only.")
End If
End Sub 'ThrowIfReadOnly
' Customizes the use of CustomSection
' by setting _ReadOnly to false.
' Remember you must use it along with ThrowIfReadOnly.
Protected Overrides Function GetRuntimeObject() As Object
' To enable property setting just assign true to
' the following flag.
_ReadOnly = True
Return MyBase.GetRuntimeObject()
End Function 'GetRuntimeObject
<StringValidator( _
InvalidCharacters:=" ~!@#$%^&*()[]{}/;'""|\", _
MinLength:=1, MaxLength:=60)> _
Public Property FileName() As String
Get
Return CStr(Me("fileName"))
End Get
Set(ByVal value As String)
' With this you disable the setting.
' Remember that the _ReadOnly flag must
' be set to true in the GetRuntimeObject.
ThrowIfReadOnly("FileName")
Me("fileName") = value
End Set
End Property
<LongValidator( _
MinValue:=1, MaxValue:=1000000, _
ExcludeRange:=False)> _
Public Property MaxUsers() As Long
Get
Return Fix(Me("maxUsers"))
End Get
Set(ByVal value As Long)
Me("maxUsers") = Value
End Set
End Property
<TimeSpanValidator( _
MinValueString:="0:0:30", _
MaxValueString:="5:00:0", ExcludeRange:=False)> _
Public Property MaxIdleTime() As TimeSpan
Get
Return CType(Me("maxIdleTime"), TimeSpan)
End Get
Set(ByVal value As TimeSpan)
Me("maxIdleTime") = Value
End Set
End Property
End Class 'CustomSection
// Define a custom section.
// The CustomSection type allows to define a custom section
// programmatically.
public sealed class CustomSection :
ConfigurationSection
{
// The collection (property bag) that contains
// the section properties.
private static ConfigurationPropertyCollection _Properties;
// Internal flag to disable
// property setting.
private static bool _ReadOnly;
// The FileName property.
private static readonly ConfigurationProperty _FileName =
new ConfigurationProperty("fileName",
typeof(string),"default.txt",
ConfigurationPropertyOptions.IsRequired);
// The MaxUsers property.
private static readonly ConfigurationProperty _MaxUsers =
new ConfigurationProperty("maxUsers",
typeof(long), (long)1000,
ConfigurationPropertyOptions.None);
// The MaxIdleTime property.
private static readonly ConfigurationProperty _MaxIdleTime =
new ConfigurationProperty("maxIdleTime",
typeof(TimeSpan), TimeSpan.FromMinutes(5),
ConfigurationPropertyOptions.IsRequired);
// CustomSection constructor.
public CustomSection()
{
// Property initialization
_Properties =
new ConfigurationPropertyCollection();
_Properties.Add(_FileName);
_Properties.Add(_MaxUsers);
_Properties.Add(_MaxIdleTime);
}
// This is a key customization.
// It returns the initialized property bag.
protected override ConfigurationPropertyCollection Properties
{
get
{
return _Properties;
}
}
private new bool IsReadOnly
{
get
{
return _ReadOnly;
}
}
// Use this to disable property setting.
private void ThrowIfReadOnly(string propertyName)
{
if (IsReadOnly)
throw new ConfigurationErrorsException(
"The property " + propertyName + " is read only.");
}
// Customizes the use of CustomSection
// by setting _ReadOnly to false.
// Remember you must use it along with ThrowIfReadOnly.
protected override object GetRuntimeObject()
{
// To enable property setting just assign true to
// the following flag.
_ReadOnly = true;
return base.GetRuntimeObject();
}
[StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\",
MinLength = 1, MaxLength = 60)]
public string FileName
{
get
{
return (string)this["fileName"];
}
set
{
// With this you disable the setting.
// Remember that the _ReadOnly flag must
// be set to true in the GetRuntimeObject.
ThrowIfReadOnly("FileName");
this["fileName"] = value;
}
}
[LongValidator(MinValue = 1, MaxValue = 1000000,
ExcludeRange = false)]
public long MaxUsers
{
get
{
return (long)this["maxUsers"];
}
set
{
this["maxUsers"] = value;
}
}
[TimeSpanValidator(MinValueString = "0:0:30",
MaxValueString = "5:00:0",
ExcludeRange = false)]
public TimeSpan MaxIdleTime
{
get
{
return (TimeSpan)this["maxIdleTime"];
}
set
{
this["maxIdleTime"] = value;
}
}
}
下面的示例摘自应用于上一示例的配置文件。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="CustomSection" type="Samples.AspNet. CustomSection, CustomConfigurationSection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
</configSections>
<CustomSection fileName="default.txt" maxUsers="1000" maxIdleTime="00:15:00" />
</configuration>
System..::.Object
System.Configuration..::.ConfigurationElement
System.Configuration..::.ConfigurationSection
System.Configuration..::.AppSettingsSection
System.Configuration..::.ClientSettingsSection
System.Configuration..::.ConnectionStringsSection
System.Configuration..::.DefaultSection
System.Configuration..::.IgnoreSection
System.Configuration..::.ProtectedConfigurationSection
System.Net.Configuration..::.AuthenticationModulesSection
System.Net.Configuration..::.ConnectionManagementSection
System.Net.Configuration..::.DefaultProxySection
System.Net.Configuration..::.RequestCachingSection
System.Net.Configuration..::.SettingsSection
System.Net.Configuration..::.SmtpSection
System.Net.Configuration..::.WebRequestModulesSection
System.Runtime.Serialization.Configuration..::.DataContractSerializerSection
System.ServiceModel.Activation.Configuration..::.DiagnosticSection
System.ServiceModel.Activation.Configuration..::.NetPipeSection
System.ServiceModel.Activation.Configuration..::.NetTcpSection
System.ServiceModel.Configuration..::.BehaviorsSection
System.ServiceModel.Configuration..::.BindingsSection
System.ServiceModel.Configuration..::.ClientSection
System.ServiceModel.Configuration..::.ComContractsSection
System.ServiceModel.Configuration..::.CommonBehaviorsSection
System.ServiceModel.Configuration..::.DiagnosticSection
System.ServiceModel.Configuration..::.ExtensionsSection
System.ServiceModel.Configuration..::.ServiceHostingEnvironmentSection
System.ServiceModel.Configuration..::.ServicesSection
System.Transactions.Configuration..::.DefaultSettingsSection
System.Transactions.Configuration..::.MachineSettingsSection
System.Web.Configuration..::.AnonymousIdentificationSection
System.Web.Configuration..::.AuthenticationSection
System.Web.Configuration..::.AuthorizationSection
System.Web.Configuration..::.CacheSection
System.Web.Configuration..::.ClientTargetSection
System.Web.Configuration..::.CompilationSection
System.Web.Configuration..::.CustomErrorsSection
System.Web.Configuration..::.DeploymentSection
System.Web.Configuration..::.GlobalizationSection
System.Web.Configuration..::.HealthMonitoringSection
System.Web.Configuration..::.HostingEnvironmentSection
System.Web.Configuration..::.HttpCookiesSection
System.Web.Configuration..::.HttpHandlersSection
System.Web.Configuration..::.HttpModulesSection
System.Web.Configuration..::.HttpRuntimeSection
System.Web.Configuration..::.IdentitySection
System.Web.Configuration..::.MachineKeySection
System.Web.Configuration..::.MembershipSection
System.Web.Configuration..::.OutputCacheSection
System.Web.Configuration..::.OutputCacheSettingsSection
System.Web.Configuration..::.PagesSection
System.Web.Configuration..::.ProcessModelSection
System.Web.Configuration..::.ProfileSection
System.Web.Configuration..::.RoleManagerSection
System.Web.Configuration..::.ScriptingAuthenticationServiceSection
System.Web.Configuration..::.ScriptingJsonSerializationSection
System.Web.Configuration..::.ScriptingProfileServiceSection
System.Web.Configuration..::.ScriptingRoleServiceSection
System.Web.Configuration..::.ScriptingScriptResourceHandlerSection
System.Web.Configuration..::.SecurityPolicySection
System.Web.Configuration..::.SessionPageStateSection
System.Web.Configuration..::.SessionStateSection
System.Web.Configuration..::.SiteMapSection
System.Web.Configuration..::.SqlCacheDependencySection
System.Web.Configuration..::.TraceSection
System.Web.Configuration..::.TrustSection
System.Web.Configuration..::.UrlMappingsSection
System.Web.Configuration..::.WebControlsSection
System.Web.Configuration..::.WebPartsSection
System.Web.Configuration..::.XhtmlConformanceSection
System.Web.Mobile..::.DeviceFiltersSection
System.Web.Services.Configuration..::.WebServicesSection
System.Web.UI.MobileControls..::.MobileControlsSection
System.Windows.Forms..::.WindowsFormsSection
System.Workflow.Activities.Configuration..::.ActiveDirectoryRoleFactoryConfiguration
System.Workflow.Activities..::.ExternalDataExchangeServiceSection
System.Workflow.Runtime.Configuration..::.WorkflowRuntimeSection
System.Xml.Serialization.Configuration..::.DateTimeSerializationSection
System.Xml.Serialization.Configuration..::.SchemaImporterExtensionsSection
System.Xml.Serialization.Configuration..::.XmlSerializerSection
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。
.NET Framework
受以下版本支持:3.5、3.0、2.0
参考
其他资源