ConfigurationValidatorAttribute Class

Serves as the base class for the System.Configuration validator attribute types.

Namespace:  System.Configuration
Assembly:  System.Configuration (in System.Configuration.dll)

'Declaration
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public Class ConfigurationValidatorAttribute _
	Inherits Attribute

The ConfigurationValidatorAttribute type exposes the following members.

  NameDescription
Protected methodConfigurationValidatorAttributeInitializes a new instance of the ConfigurationValidatorAttribute class.
Public methodConfigurationValidatorAttribute(Type)Initializes a new instance of the ConfigurationValidatorAttribute class using the specified validator type.
Top

  NameDescription
Public propertyTypeIdWhen implemented in a derived class, gets a unique identifier for this Attribute. (Inherited from Attribute.)
Public propertyValidatorInstanceGets the validator attribute instance.
Public propertyValidatorTypeGets the type of the validator attribute.
Top

  NameDescription
Public methodEqualsInfrastructure. Returns a value that indicates whether this instance is equal to a specified object. (Inherited from Attribute.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeReturns the hash code for this instance. (Inherited from Attribute.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodIsDefaultAttributeWhen overridden in a derived class, indicates whether the value of this instance is the default value for the derived class. (Inherited from Attribute.)
Public methodMatchWhen overridden in a derived class, returns a value that indicates whether this instance equals a specified object. (Inherited from Attribute.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

  NameDescription
Explicit interface implemetationPrivate method_Attribute.GetIDsOfNamesMaps a set of names to a corresponding set of dispatch identifiers. (Inherited from Attribute.)
Explicit interface implemetationPrivate method_Attribute.GetTypeInfoRetrieves the type information for an object, which can be used to get the type information for an interface. (Inherited from Attribute.)
Explicit interface implemetationPrivate method_Attribute.GetTypeInfoCountRetrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from Attribute.)
Explicit interface implemetationPrivate method_Attribute.InvokeProvides access to properties and methods exposed by an object. (Inherited from Attribute.)
Top

All the ASP.NET configuration standard validator attribute types derive from ConfigurationValidatorAttribute. You can use this type to create your own custom validator 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>

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft