Configuration Section Groups The appSettings Section

129 strSomeSetting = CTypecfgsomeSetting, String strAnotherSetting = CTypecfganotherSetting, String End If Console.WriteLinestrSomeSetting Console.WriteLinestrAnotherSetting End Sub End Module The main difference to note in Ex am ple 3- 5 is that the NameValueSectionHandler creates an object of type NameValueCollection defined in the System.Collections.Specialized namespace.

3.11.2 Configuration Section Groups

If application-configuration information is to be stored in the machine-configuration file, it is a good idea to introduce configuration section groups into the picture. Recall that if the runtime doesnt find the requested section in the application-configuration file, it automatically looks for it in the machine- configuration file. This simply groups an applications settings into an enclosing group element in the configuration file, so that the contained elements wont potentially conflict with like-named elements for other applications. Ex am ple 3- 6 shows how to introduce a section group. It is identical to the configuration file shown in Ex am ple 3- 2 , except that a section group is defined. Example 3-6. Creating a section group ?xml version=1.0 encoding=UTF-8? configuration configSections sectionGroup name=myGroupName section name=mySectionName type=System.Configuration.SingleTagSectionHandler sectionGroup configSections myGroupName mySectionName someSetting=SomeValue anotherSetting=AnotherValue myGroupName configuration Ex am ple 3- 7 shows how to read this configuration file in code. Example 3-7. Reading the configuration file shown in Ex a m ple 3 - 6 Imports System Imports System.Collections Imports System.Configuration Public Module SomeModule Public Sub Main Dim cfg As Hashtable Dim strSomeSetting As String 130 Dim strAnotherSetting As String cfg = CType _ ConfigurationSettings.GetConfigmyGroupNamemySectionName, _ Hashtable If Not cfg Is Nothing Then strSomeSetting = CTypecfgsomeSetting, String strAnotherSetting = CTypecfganotherSetting, String End If Console.WriteLinestrSomeSetting Console.WriteLinestrAnotherSetting End Sub End Module The only difference between Ex am ple 3- 7 and Ex am ple 3- 3 is the path-style syntax in Ex am ple 3- 7 used to specify the section name: myGroupNamemySectionName . Group definitions can be nested, if desired.

3.11.3 The appSettings Section

Most applications just need a simple way to store keyvalue pairs. To support this, the machine.config file contains a predefined section definition called appSettings . It is always legal to include an appSettings section in any configuration file. The configuration section handler for the appSettings section is the NameValueSectionHandler class, so the section should be in this form: appSettings add key=setting1 value=value1 add key=setting2 value=value2 add key=setting3 value=value3 appSettings Although the appSettings section can be read using the GetConfig method just like any other section, the ConfigurationSettings class has a property that is specifically intended to assist with reading the appSettings section. The read-only AppSettings property of the ConfigurationSettings class returns a NameValueCollection object that contains the keyvalue pairs found in the appSettings section. Ex am ple 3- 8 shows how to read the settings shown in the previous code listing. Example 3-8. Reading the appSettings section Imports System Imports System.Collections.Specialized Imports System.Configuration Public Module SomeModule Public Sub Main Dim cfg As NameValueCollection Dim strSetting1 As String Dim strSetting2 As String Dim strSetting3 As String cfg = CTypeConfigurationSettings.AppSettings, NameValueCollection If Not cfg Is Nothing Then strSetting1 = CTypecfgsetting1, String 131 strSetting2 = CTypecfgsetting2, String strSetting3 = CTypecfgsetting3, String End If Console.WriteLinestrSetting1 Console.WriteLinestrSetting2 Console.WriteLinestrSetting3 End Sub End Module The namevalue pairs in the appSettings section are developer-defined. The CLR doesnt attribute any intrinsic meaning to any particular namevalue pair.

3.12 Summary