ConfigurationCollectionAttribute 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
구성 요소 컬렉션의 인스턴스를 만들도록 .NET에 선언적으로 지시합니다. 이 클래스는 상속될 수 없습니다.
public ref class ConfigurationCollectionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Property)]
public sealed class ConfigurationCollectionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Property)>]
type ConfigurationCollectionAttribute = class
inherit Attribute
Public NotInheritable Class ConfigurationCollectionAttribute
Inherits Attribute
- 상속
- 특성
예제
다음 예제에서는 사용 하는 방법의 ConfigurationCollectionAttribute합니다.
이 예제는 , UrlsCollection
및 UrlConfigElement
의 세 가지 클래스로 구성됩니다UrlsSection
. 클래스는 UrlsSection
를 ConfigurationCollectionAttribute 사용하여 사용자 지정 구성 섹션을 정의합니다. 이 섹션에는 URL 요소(클래스에서 UrlsCollection
정의됨)의 URL 컬렉션(클래스에서 UrlConfigElement
정의됨)이 포함되어 있습니다. 예제의 인스턴스를 실행 하는 경우는 UrlsSection
클래스 생성 되 고 다음 구성 요소를 애플리케이션 구성 파일에서 생성 됩니다.
<configuration>
<configSections>
<section name="MyUrls" type="UrlsSection,
ConfigurationCollectionAttribute, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<MyUrls>
<urls>
<remove name="Contoso" />
<add name="Contoso" url="http://www.contoso.com" port="0" />
</urls>
</MyUrls>
</configuration
using System;
using System.Configuration;
// Define a custom section that contains a custom
// UrlsCollection collection of custom UrlConfigElement elements.
// This class shows how to use the ConfigurationCollectionAttribute.
public class UrlsSection : ConfigurationSection
{
// Declare the Urls collection property using the
// ConfigurationCollectionAttribute.
// This allows to build a nested section that contains
// a collection of elements.
[ConfigurationProperty("urls", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(UrlsCollection),
AddItemName = "add",
ClearItemsName = "clear",
RemoveItemName = "remove")]
public UrlsCollection Urls
{
get
{
UrlsCollection urlsCollection =
(UrlsCollection)base["urls"];
return urlsCollection;
}
}
}
// Define the custom UrlsCollection that contains the
// custom UrlsConfigElement elements.
public class UrlsCollection : ConfigurationElementCollection
{
public UrlsCollection()
{
UrlConfigElement url = (UrlConfigElement)CreateNewElement();
Add(url);
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.AddRemoveClearMap;
}
}
protected override ConfigurationElement CreateNewElement()
{
return new UrlConfigElement();
}
protected override Object GetElementKey(ConfigurationElement element)
{
return ((UrlConfigElement)element).Name;
}
public UrlConfigElement this[int index]
{
get
{
return (UrlConfigElement)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
new public UrlConfigElement this[string Name]
{
get
{
return (UrlConfigElement)BaseGet(Name);
}
}
public int IndexOf(UrlConfigElement url)
{
return BaseIndexOf(url);
}
public void Add(UrlConfigElement url)
{
BaseAdd(url);
}
protected override void BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
}
public void Remove(UrlConfigElement url)
{
if (BaseIndexOf(url) >= 0)
BaseRemove(url.Name);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
public void Clear()
{
BaseClear();
}
}
// Define the custom UrlsConfigElement elements that are contained
// by the custom UrlsCollection.
// Notice that you can change the default values to create new default elements.
public class UrlConfigElement : ConfigurationElement
{
public UrlConfigElement(String name, String url)
{
this.Name = name;
this.Url = url;
}
public UrlConfigElement()
{
this.Name = "Contoso";
this.Url = "http://www.contoso.com";
this.Port = 0;
}
[ConfigurationProperty("name", DefaultValue = "Contoso",
IsRequired = true, IsKey = true)]
public string Name
{
get
{
return (string)this["name"];
}
set
{
this["name"] = value;
}
}
[ConfigurationProperty("url", DefaultValue = "http://www.contoso.com",
IsRequired = true)]
[RegexStringValidator(@"\w+:\/\/[\w.]+\S*")]
public string Url
{
get
{
return (string)this["url"];
}
set
{
this["url"] = value;
}
}
[ConfigurationProperty("port", DefaultValue = (int)0, IsRequired = false)]
[IntegerValidator(MinValue = 0, MaxValue = 8080, ExcludeRange = false)]
public int Port
{
get
{
return (int)this["port"];
}
set
{
this["port"] = value;
}
}
}
Imports System.Configuration
' Define a custom section that contains a custom
' UrlsCollection collection of custom UrlConfigElement elements.
' This class shows how to use the ConfigurationCollectionAttribute.
Public Class UrlsSection
Inherits ConfigurationSection
' Declare the Urls collection property using the
' ConfigurationCollectionAttribute.
' This allows to build a nested section that contains
' a collection of elements.
<ConfigurationProperty("urls", IsDefaultCollection:=False),
System.Configuration.ConfigurationCollection(GetType(UrlsCollection),
AddItemName:="add", ClearItemsName:="clear", RemoveItemName:="remove")> _
Public ReadOnly Property Urls() As UrlsCollection
Get
Dim urlsCollection As UrlsCollection = CType(MyBase.Item("urls"), UrlsCollection)
Return urlsCollection
End Get
End Property
End Class
' Define the custom UrlsCollection that contains the
' custom UrlsConfigElement elements.
Public Class UrlsCollection
Inherits ConfigurationElementCollection
Public Sub New()
Dim url As UrlConfigElement = CType(CreateNewElement(), UrlConfigElement)
Add(url)
End Sub
Public Overrides ReadOnly Property CollectionType() As ConfigurationElementCollectionType
Get
Return ConfigurationElementCollectionType.AddRemoveClearMap
End Get
End Property
Protected Overloads Overrides Function CreateNewElement() As ConfigurationElement
Return New UrlConfigElement()
End Function
Protected Overrides Function GetElementKey(ByVal element As ConfigurationElement) As Object
Return (CType(element, UrlConfigElement)).Name
End Function
Default Shadows Property Item(ByVal index As Integer) As UrlConfigElement
Get
Return CType(BaseGet(index), UrlConfigElement)
End Get
Set(ByVal value As UrlConfigElement)
If BaseGet(index) IsNot Nothing Then
BaseRemoveAt(index)
End If
BaseAdd(index, value)
End Set
End Property
Default Public Shadows ReadOnly Property Item(ByVal Name As String) As UrlConfigElement
Get
Return CType(BaseGet(Name), UrlConfigElement)
End Get
End Property
Public Function IndexOf(ByVal url As UrlConfigElement) As Integer
Return BaseIndexOf(url)
End Function
Public Sub Add(ByVal url As UrlConfigElement)
BaseAdd(url)
End Sub
Protected Overloads Overrides Sub BaseAdd(ByVal element As ConfigurationElement)
BaseAdd(element, False)
End Sub
Public Sub Remove(ByVal url As UrlConfigElement)
If BaseIndexOf(url) >= 0 Then
BaseRemove(url.Name)
End If
End Sub
Public Sub RemoveAt(ByVal index As Integer)
BaseRemoveAt(index)
End Sub
Public Sub Remove(ByVal name As String)
BaseRemove(name)
End Sub
Public Sub Clear()
BaseClear()
End Sub
End Class
' Define the custom UrlsConfigElement elements that are contained
' by the custom UrlsCollection.
Public Class UrlConfigElement
Inherits ConfigurationElement
Public Sub New(ByVal name As String, ByVal url As String)
Me.Name = name
Me.Url = url
End Sub
Public Sub New()
Me.Name = "Contoso"
Me.Url = "http://www.contoso.com"
Me.Port = 0
End Sub
<ConfigurationProperty("name", DefaultValue:="Contoso", IsRequired:=True, IsKey:=True)> _
Public Property Name() As String
Get
Return CStr(Me("name"))
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("url", DefaultValue:="http://www.contoso.com", IsRequired:=True),
RegexStringValidator("\w+:\/\/[\w.]+\S*")> _
Public Property Url() As String
Get
Return CStr(Me("url"))
End Get
Set(ByVal value As String)
Me("url") = value
End Set
End Property
<ConfigurationProperty("port", DefaultValue:=0, IsRequired:=False),
IntegerValidator(MinValue:=0, MaxValue:=8080, ExcludeRange:=False)> _
Public Property Port() As Integer
Get
Return CInt(Fix(Me("port")))
End Get
Set(ByVal value As Integer)
Me("port") = value
End Set
End Property
End Class
using System;
using System.Configuration;
class UsingConfigurationCollectionAttribute
{
// Create a custom section and save it in the
// application configuration file.
static void CreateCustomSection()
{
try
{
// Create a custom configuration section.
UrlsSection myUrlsSection = new UrlsSection();
// Get the current configuration file.
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
// Add the custom section to the application
// configuration file.
if (config.Sections["MyUrls"] == null)
{
config.Sections.Add("MyUrls", myUrlsSection);
}
// Save the application configuration file.
myUrlsSection.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
Console.WriteLine("Created custom section in the application configuration file: {0}",
config.FilePath);
Console.WriteLine();
}
catch (ConfigurationErrorsException err)
{
Console.WriteLine("CreateCustomSection: {0}", err.ToString());
}
}
static void ReadCustomSection()
{
try
{
// Get the application configuration file.
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None) as Configuration;
// Read and display the custom section.
UrlsSection myUrlsSection =
ConfigurationManager.GetSection("MyUrls") as UrlsSection;
if (myUrlsSection == null)
{
Console.WriteLine("Failed to load UrlsSection.");
}
else
{
Console.WriteLine("URLs defined in the configuration file:");
for (int i = 0; i < myUrlsSection.Urls.Count; i++)
{
Console.WriteLine(" Name={0} URL={1} Port={2}",
myUrlsSection.Urls[i].Name,
myUrlsSection.Urls[i].Url,
myUrlsSection.Urls[i].Port);
}
}
}
catch (ConfigurationErrorsException err)
{
Console.WriteLine("ReadCustomSection(string): {0}", err.ToString());
}
}
static void Main(string[] args)
{
// Get the name of the application.
string appName =
Environment.GetCommandLineArgs()[0];
// Create a custom section and save it in the
// application configuration file.
CreateCustomSection();
// Read the custom section saved in the
// application configuration file.
ReadCustomSection();
Console.WriteLine();
Console.WriteLine("Enter any key to exit.");
Console.ReadLine();
}
}
Imports System.Configuration
Friend Class UsingConfigurationCollectionAttribute
' Create a custom section and save it in the
' application configuration file.
Private Shared Sub CreateCustomSection()
Try
' Create a custom configuration section.
Dim myUrlsSection As New UrlsSection()
' Get the current configuration file.
Dim config As System.Configuration.Configuration =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
' Add the custom section to the application
' configuration file.
If config.Sections("MyUrls") Is Nothing Then
config.Sections.Add("MyUrls", myUrlsSection)
End If
' Save the application configuration file.
myUrlsSection.SectionInformation.ForceSave = True
config.Save(ConfigurationSaveMode.Modified)
Console.WriteLine("Created custom section in the application configuration file: {0}", config.FilePath)
Console.WriteLine()
Catch err As ConfigurationErrorsException
Console.WriteLine("CreateCustomSection: {0}", err.ToString())
End Try
End Sub
Private Shared Sub ReadCustomSection()
Try
' Get the application configuration file.
Dim config As System.Configuration.Configuration = TryCast(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None), Configuration)
' Read and display the custom section.
Dim myUrlsSection As UrlsSection = TryCast(ConfigurationManager.GetSection("MyUrls"), UrlsSection)
If myUrlsSection Is Nothing Then
Console.WriteLine("Failed to load UrlsSection.")
Else
Console.WriteLine("URLs defined in app.config:")
For i As Integer = 0 To myUrlsSection.Urls.Count - 1
Console.WriteLine(" Name={0} URL={1} Port={2}", myUrlsSection.Urls(i).Name, myUrlsSection.Urls(i).Url, myUrlsSection.Urls(i).Port)
Next i
End If
Catch err As ConfigurationErrorsException
Console.WriteLine("ReadCustomSection(string): {0}", err.ToString())
End Try
End Sub
Shared Sub Main(ByVal args() As String)
' Get the name of the application.
Dim appName As String = Environment.GetCommandLineArgs()(0)
' Create a custom section and save it in the
' application configuration file.
CreateCustomSection()
' Read the custom section saved in the
' application configuration file.
ReadCustomSection()
Console.WriteLine()
Console.WriteLine("Enter any key to exit.")
Console.ReadLine()
End Sub
End Class
설명
특성을 사용하여 ConfigurationCollectionAttribute 요소를 데코레이트합니다 ConfigurationElementCollection . 이렇게 하면 .NET에서 컬렉션의 instance 만들고 사용자 지정 ConfigurationElement 값을 사용하여 초기화하도록 지시합니다.
참고
사용자 지정 구성 요소를 만드는 가장 간단한 방법은 특성(선언적) 모델을 사용하는 것입니다. 요소를 선언하고 특성으로 ConfigurationCollectionAttribute 데코레이트합니다. 이 특성으로 표시된 각 요소에 대해 .NET은 리플렉션을 사용하여 데코레이팅 매개 변수를 읽고 관련 ConfigurationElementCollection instance 만듭니다. 프로그래밍 모델을 사용할 수도 있습니다. 이 경우 사용자 지정 공용 컬렉션을 선언할 뿐만 아니라 멤버를 재정의 ConfigurationElementCollection 하고 속성 컬렉션을 반환해야 합니다.
.NET 구성 시스템은 사용자 지정 구성 요소를 만드는 동안 사용할 수 있는 특성 형식을 제공합니다. 특성에는 두 가지 종류가 있습니다.
사용자 지정 구성 요소 속성의 인스턴스를 만드는 방법을 .NET에 지시하는 특성입니다. 이러한 유형에는 다음이 포함됩니다.
사용자 지정 구성 요소 속성의 유효성을 검사하는 방법을 .NET에 지시하는 특성입니다. 이러한 유형에는 다음이 포함됩니다.
생성자
ConfigurationCollectionAttribute(Type) |
ConfigurationCollectionAttribute 클래스의 새 인스턴스를 초기화합니다. |
속성
AddItemName |
|
ClearItemsName |
|
CollectionType |
ConfigurationCollectionAttribute 특성의 형식을 가져오거나 설정합니다. |
ItemType |
컬렉션 요소의 형식을 가져옵니다. |
RemoveItemName |
|
TypeId |
파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다. (다음에서 상속됨 Attribute) |
메서드
Equals(Object) |
이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다. (다음에서 상속됨 Attribute) |
GetHashCode() |
이 인스턴스의 해시 코드를 반환합니다. (다음에서 상속됨 Attribute) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
IsDefaultAttribute() |
파생 클래스에서 재정의된 경우 이 인스턴스 값이 파생 클래스에 대한 기본값인지 여부를 표시합니다. (다음에서 상속됨 Attribute) |
Match(Object) |
파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (다음에서 상속됨 Attribute) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
명시적 인터페이스 구현
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다. (다음에서 상속됨 Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다. (다음에서 상속됨 Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1). (다음에서 상속됨 Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다. (다음에서 상속됨 Attribute) |
적용 대상
추가 정보
.NET