ConfigurationValidatorAttribute Class
Assembly: System.Configuration (in system.configuration.dll)
'Declaration <AttributeUsageAttribute(AttributeTargets.Property)> _ Public Class ConfigurationValidatorAttribute Inherits Attribute 'Usage Dim instance As ConfigurationValidatorAttribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Property) */ public class ConfigurationValidatorAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Property) public class ConfigurationValidatorAttribute extends Attribute
The following code examples demonstrate how to create two custom validators using the ConfigurationValidatorAttribute type. The first example performs validation using hard-coded parameters; the second example performs validation using the parameters assigned to it at the time it is applied to the related section property. This code example also contains three supporting files. The first file contains the custom section that uses the validators described above, the second file contains a custom converter type, and the third file contains the console application that builds and uses the custom validators and the section that contains them.
The following code example shows how to create a fixed validator with hard-coded parameters.
Imports System Imports System.Collections.Generic Imports System.Collections Imports System.Text Imports System.Configuration ' Show how to create a custom fixed ' validator. That is a validator whose ' validation parameters are hard code in this ' type. Public Class FixedValidator Inherits ConfigurationValidatorBase Public Overrides Function CanValidate( _ ByVal type As Type) As Boolean Return type Is GetType(Automobile) End Function 'CanValidate Public Overrides Sub Validate(ByVal value _ As Object) Dim make As New ArrayList() make.Add("Ferrari") make.Add("Porsche") make.Add("Lamborghini") Dim minYear As Integer = 2004 Dim maxMiles As Long = 100 Dim color As String = "red" Dim car As Automobile = CType(value, Automobile) Try If Not make.Contains(car.Make) Then Throw New ConfigurationErrorsException( _ "My dream car is not made by " + car.Make) End If ' Make sure the year is valid If car.Year < minYear Then Throw New ConfigurationErrorsException( _ "My dream car cannot be older than " + _ minYear.ToString()) End If ' Make sure the car can still run on its own If car.Miles > maxMiles Then Throw New ConfigurationErrorsException( _ "My dream car drive odometer cannot read more than " + _ maxMiles.ToString() + " miles") End If ' Validate color If car.Color.ToLower() <> color Then Throw New ConfigurationErrorsException( _ "My dream car can oly be " + color) End If Catch err As ConfigurationErrorsException Console.WriteLine(err.ToString()) End Try End Sub 'Validate End Class 'FixedValidator
The following code example shows how to create a programmable validator.
Imports System Imports System.Collections.Generic Imports System.Text Imports System.Configuration ' Show how to create a custom programmable ' validator. That is a validator whose ' validation parameters can be passed when the ' validator is applied to a property. Public Class ProgrammableValidator Inherits ConfigurationValidatorBase Private pmake As String Private pcolor As String Private pmaxMiles As Long Private pminYear As Integer Public Sub New(ByVal make As String, ByVal color As String, ByVal maxMiles As Long, ByVal minYear As Integer) pmake = make pcolor = color pminYear = minYear pmaxMiles = maxMiles End Sub 'New Public Overrides Function CanValidate( _ ByVal type As Type) As Boolean Return type Is GetType(Automobile) End Function 'CanValidate Public Overrides Sub Validate(ByVal value As Object) Dim car As Automobile = CType(value, Automobile) Try ' Validate make If car.Make <> pmake Then Throw New ConfigurationErrorsException( _ "I do not by cars made by " + car.Make) End If ' Validate color If car.Color <> pcolor Then Throw New ConfigurationErrorsException( _ "My commute car must be " + pcolor) End If ' Validate year If car.Year < pminYear Then Throw New ConfigurationErrorsException( _ "It's about time you get a new car.") End If ' Validate miles If car.Miles > pmaxMiles Then Throw New ConfigurationErrorsException( _ "Don't take too long trips with that car.") End If Catch err As ConfigurationErrorsException Console.WriteLine(err.ToString()) End Try End Sub 'Validate End Class 'ProgrammableValidator Public Class ProgrammableValidatorAttribute Inherits ConfigurationValidatorAttribute Private pmake As String Private pcolor As String Private pminYear As Integer Private pmaxMiles As Long Public Property Make() As String Get Return pmake End Get Set pmake = value End Set End Property Public Property Color() As String Get Return pcolor End Get Set pcolor = value End Set End Property Public Property MinYear() As Integer Get Return pminYear End Get Set pminYear = value End Set End Property Public Property MaxMiles() As Long Get Return pmaxMiles End Get Set pmaxMiles = value End Set End Property Public Sub New(ByVal make As String, _ ByVal color As String, ByVal miles As Long, _ ByVal year As Integer) pmake = make pcolor = color pminYear = year pmaxMiles = miles End Sub 'New Public Overrides ReadOnly Property ValidatorInstance() _ As ConfigurationValidatorBase Get Return New ProgrammableValidator(pmake, _ pcolor, pmaxMiles, pminYear) End Get End Property End Class 'ProgrammableValidatorAttribute
The following code example shows how to create a custom section using the previous validators.
Imports System Imports System.Collections.Generic Imports System.Text Imports System.Configuration Imports System.ComponentModel Imports System.Globalization ' Define the distinctive ' charecteristics of a car. NotInheritable Public Class Automobile Public Enum specification make = 0 color = 1 miles = 2 year = 3 picture = 4 End Enum 'specification Public Make As String Public Color As String Public Year As Integer Public Miles As Long Public Picture As String End Class 'Automobile ' Define a custom section to select a car. ' This section contains two properties one ' to define a commute car the other ' to define a dream car. ' This generates a configuration section such as: ' <Cars commute="Make:AlfaRomeo Color:Blue Miles:10000 Year:2002" ' dream="Make:Ferrari Color:Red Miles:10 Year:2005" /> NotInheritable Public Class SelectCar Inherits ConfigurationSection ' Define your commute car. ' The ProgrammableValidatorAttribute allows you to define the ' chracteristics of your commute car by changing ' the values you pass to the next. ' See the ProgrammableValidatorAttribute for details. <ProgrammableValidator("AlfaRomeo", "Blue", 10000, 2002), _ TypeConverter(GetType(AutomobileConverter)), _ ConfigurationProperty("commute", _ DefaultValue:="Make:AlfaRomeo Color:Blue Miles:10000 Year:2002")> _ Public Property Commute() As Automobile ' The AutomobileConverter converts between the Automobile ' object and its related configuration commute attribute ' string value. ' Refer to AutomobileConverter for details. ' Define the name of the configuration attribute to associate ' with this property. Enter the default values. ' Remember these default values must reflect the parameters ' you entered in the ProgrammableValidator above. Get Return CType(Me("commute"), Automobile) End Get Set(ByVal value As Automobile) Me("commute") = value End Set End Property ' Apply the FixedValidatorAttribute. Here your choice ' (dream) is predetermined by the values contained in the ' FixedValidatorAttribute. Being a dream, you would think ' otherwise but that's not the case. ' See the FixedValidatorAttribute to choose your dream. <ConfigurationValidatorAttribute(GetType(FixedValidator)), _ TypeConverter(GetType(AutomobileConverter)), _ ConfigurationProperty("dream", _ DefaultValue:="Make:Ferrari Color:Red Miles:10 Year:2005")> _ Public Property Dream() As Automobile ' The AutomobileConverter converts between the Automobile ' object and its related configuration dream attribute ' string value. ' Refer to AutomobileConverter for details. Get Return CType(Me("dream"), Automobile) End Get Set(ByVal value As Automobile) Me("dream") = value End Set End Property Public Sub New() End Sub 'New End Class 'SelectCar ' Here you put your ' initializations, if necessary.
The following code example shows how to create a custom converter.
Imports System Imports System.Collections.Generic Imports System.Text Imports System.Configuration Imports System.ComponentModel Imports System.Globalization ' The AutomobileConverter converts between the Automobile ' object and its related configuration commute and ' dream attribute string values. NotInheritable Public Class AutomobileConverter Inherits ConfigurationConverterBase Friend Function ValidateType(ByVal value As Object, _ ByVal expected As Type) As Boolean Dim result As Boolean If Not (value Is Nothing) _ AndAlso value.GetType() IsNot expected Then result = False Else result = True End If Return result End Function 'ValidateType Public Overrides Function CanConvertTo(ByVal ctx _ As ITypeDescriptorContext, ByVal type As Type) As Boolean Return type Is GetType(Automobile) End Function 'CanConvertTo Public Overrides Function CanConvertFrom(ByVal ctx _ As ITypeDescriptorContext, ByVal type As Type) As Boolean Return type Is GetType(Automobile) End Function 'CanConvertFrom Public Overrides Function ConvertTo(ByVal ctx _ As ITypeDescriptorContext, ByVal ci As CultureInfo, _ ByVal value As Object, ByVal type As Type) As Object Dim data As String If ValidateType(value, GetType(Automobile)) Then Dim make As String = _ CStr(CType(value, Automobile).Make) Dim color As String = _ CStr(CType(value, Automobile).Color) Dim miles As String = _ CStr(CType(value, Automobile).Miles.ToString()) Dim year As String = _ CStr(CType(value, Automobile).Year.ToString()) data = "Make:" + make + " Color:" + color + _ " Miles:" + miles + " Year:" + year Else data = "Invalid type" End If Return data End Function 'ConvertTo Public Overrides Function ConvertFrom(ByVal ctx _ As ITypeDescriptorContext, ByVal ci As CultureInfo, _ ByVal data As Object) As Object Dim selectedCar As New Automobile() Dim carInfo As String = CStr(data) Dim carSpecs As String() = carInfo.Split(New [Char]() {" "c) ' selectedCar.Make = carSpecs[0].ToString(); ' selectedCar.Make = carSpecs[0].ToString(); Dim make As String = _ carSpecs(Fix(Automobile.specification.make)).ToString() Dim color As String = _ carSpecs(Fix(Automobile.specification.color)).ToString() Dim miles As String = _ carSpecs(Fix(Automobile.specification.miles)).ToString() Dim year As String = _ carSpecs(Fix(Automobile.specification.year)).ToString() selectedCar.Make = _ make.Substring(make.IndexOf(":") + 1) selectedCar.Color = _ color.Substring(color.IndexOf(":") + 1) selectedCar.Miles = _ Convert.ToInt32(miles.Substring(miles.IndexOf(":") + 1)) selectedCar.Year = _ Convert.ToInt32(year.Substring(year.IndexOf(":") + 1)) Return selectedCar End Function 'ConvertFrom End Class 'AutomobileConverter
The following code example shows how to create the console application that builds and uses the custom validators and their containing section.
Imports System Imports System.Collections.Generic Imports System.Text Imports System.Configuration Class TestingConfigValidatorAttribute Shared Sub New() Try Dim car As SelectCar ' Get the current configuration file. Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) ' Create the section entry for the selected car. If config.Sections("Cars") Is Nothing Then car = New SelectCar() config.Sections.Add("Cars", car) car.SectionInformation.ForceSave = True config.Save(ConfigurationSaveMode.Full) End If Catch err As ConfigurationErrorsException Console.WriteLine(err.ToString()) End Try End Sub 'New Private Shared Sub GetCars() Try ' Get the current configuration file. Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) ' Get the Cars section. Dim cars As SelectCar = config.GetSection("Cars") Console.WriteLine("Dream Make: {0 Color: {1 Miles: {2 Year: {3", cars.Dream.Make, cars.Dream.Color, cars.Dream.Miles, cars.Dream.Year) Console.WriteLine("Commute Make: {0 Color: {1 Miles: {2 Year: {3", cars.Commute.Make, cars.Commute.Color, cars.Commute.Miles, cars.Commute.Year) Catch err As ConfigurationErrorsException Console.WriteLine(err.ToString()) End Try End Sub 'GetCars Private Shared Sub NotAllowedCars() Try ' Get the current configuration file. Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) Dim dreamCar As New Automobile() dreamCar.Color = "Red" dreamCar.Make = "BMW" dreamCar.Miles = 10 dreamCar.Year = 2005 Dim commuteCar As New Automobile() commuteCar.Color = "Blue" commuteCar.Make = "Yugo" commuteCar.Miles = 10 commuteCar.Year = 1990 ' Get the Cars section. Dim cars As SelectCar = config.GetSection("Cars") cars.Dream = dreamCar cars.Commute = commuteCar Catch err As ConfigurationErrorsException Console.WriteLine(err.ToString()) End Try End Sub 'NotAllowedCars Shared Sub Main(ByVal args() As String) GetCars() NotAllowedCars() End Sub 'Main End Class 'TestingConfigValidatorAttribute
The following code example is a configuration excerpt used by the previous example.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="Cars" type="Samples.AspNet.SelectCar, ConfigValidatorAttribute, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="false" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" requirePermission="true" />
</configSections>
<Cars commute="Make:AlfaRomeo Color:Blue Miles:10000 Year:2002"
dream="Make:Ferrari Color:Red Miles:10 Year:2005" />
</configuration>
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.