I did a small test on the custom app. config node a few days ago. When I read it today, I removed irrelevant code and described the problem with the least amount of code. The following instances are implemented by inheriting the ConfigurationSection.
I. The results are as follows:
<? Xml version = "1.0" encoding = "UTF-8"?>
<Configuration>
<ConfigSections>
<Section name = "CustomSection" type = "CustomSectionTest. CLSCustomSection, CustomSectionTest"/>
</ConfigSections>
<CustomSection fileName = "default.txt" maxUsers = "1000" maxIdleTime = "00:15:00"/>
</Configuration>
Ii. Code
1. Custom class code method 1
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace CustomSectionTest
{
public sealed class CLSCustomSection : ConfigurationSection
{
private ConfigurationPropertyCollection _Properties;
private readonly ConfigurationProperty _FileName =
new ConfigurationProperty("fileName",
typeof(string), "default.txt",
ConfigurationPropertyOptions.IsRequired);
private readonly ConfigurationProperty _MaxUsers =
new ConfigurationProperty("maxUsers",
typeof(long), (long)1000,
ConfigurationPropertyOptions.None);
private readonly ConfigurationProperty _MaxIdleTime =
new ConfigurationProperty("maxIdleTime",
typeof(TimeSpan), TimeSpan.FromMinutes(5),
ConfigurationPropertyOptions.IsRequired);
public CLSCustomSection()
{
_Properties =
new ConfigurationPropertyCollection();
_Properties.Add(_FileName);
_Properties.Add(_MaxUsers);
_Properties.Add(_MaxIdleTime);
}
protected override ConfigurationPropertyCollection Properties
{
get
{
return _Properties;
}
}
public string FileName
{
get
{
return (string)this["fileName"];
}
set
{
this["fileName"] = value;
}
}
public long MaxUsers
{
get
{
return (long)this["maxUsers"];
}
set
{
this["maxUsers"] = value;
}
}
public TimeSpan MaxIdleTime
{
get
{
return (TimeSpan)this["maxIdleTime"];
}
set
{
this["maxIdleTime"] = value;
}
}
}
}
Custom method 2
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace CustomSectionTest
{
public sealed class CLSCustomSection : ConfigurationSection
{
[ConfigurationProperty("fileName",
DefaultValue = "default.txt",
IsRequired = true)]
public string FileName
{
get
{
return (string)this["fileName"];
}
set
{
this["fileName"] = value;
}
}
[ConfigurationProperty("maxUsers",
DefaultValue = "1000",
IsRequired = false)]
public long MaxUsers
{
get
{
return (long)this["maxUsers"];
}
set
{
this["maxUsers"] = value;
}
}
[ConfigurationProperty("maxIdleTime",
DefaultValue = "00:15:00",
IsRequired = false)]
public TimeSpan MaxIdleTime
{
get
{
return (TimeSpan)this["maxIdleTime"];
}
set
{
this["maxIdleTime"] = value;
}
}
}
}
2. Call the test
CLSCustomSection customsection = (CLSCustomSection) ConfigurationManager. GetSection ("CustomSection ");
MessageBox. Show (customsection. FileName );