Implementing 'ConfigurationSectionHandler' objects. Think I may have an error in this code but nothing to difficult to resolve
In the '.config' file for the application
1. Specify the handler within the 'configsections' area
2. Add the section as a child node of the 'configuration' node
<configuration>
<configSections>
...
<section name="mysection"
type="mynamespace.mysection.StuffConfigurationSectionHandler, Stuff" />
</configSections>
...
<mysection TransportStreamPacketSize="188">
<download MaxMessageRetries="5" MaxWaitPeriod="5000"/>
<upload MaxMessageRetries="5" MaxWaitPeriod="5000">
</upload>
</mysection>
...
</configuration>
Then write a 'ConfigurationSectionHandler' class for it
This handler must be invoked somewhere for it to do something
System.Configuration.ConfigurationSettings.GetConfig("mysection");
using System.Configuration;
// Handles the DescriptorFactory configuration
section of the application configuration file.
public class StuffConfigurationSectionHandler
: IConfigurationSectionHandler
{
#region Logging
//static readonly Logging.ILog log = ...
#endregion Logging
#region Private Data
private static object threadLock = new object();
private static bool configurationComplete = false;
#endregion Private Data
#region IConfigurationSectionHandler Members
// This method is called as a result of a call to
// ConfigurationSettings.GetConfig().
// It sets the configuration data in
// the PsiSiComms configuration object
public object Create(object parent,
object configContext, XmlNode section)
{
lock(threadLock)
{
if (!configurationComplete)
{
log.Info("Configuring XXX.");
RetrieveConfiguration(section);
configurationComplete = true;
log.Info("PsiSiComms configuration complete.");
}
}
return null;
}
#region Private Helper Methods
private void RetrieveConfiguration(XmlNode parent)
{
XmlNode node;
XmlNode uploadNode = parent.SelectSingleNode("./upload");
if (!ReferenceEquals(uploadNode, null))
{
node = uploadNode.Attributes.GetNamedItem
("MaxMessageRetries");
if (!ReferenceEquals(node, null))
{
MyXXXConfig.Upload.MaxMessageRetries
= int.Parse(node.Value);
}
node = uploadNode.Attributes.GetNamedItem
("MaxWaitPeriod");
if (!ReferenceEquals(node, null))
{
MyXXXConfig.Upload.MaxWaitPeriod
= int.Parse(node.Value);
}
RetrieveUploadTablesConfiguration(uploadNode);
}
}
#endregion Private Helper Methods
#endregion
}
No comments:
Post a Comment