.net 为什么我的ConfigurationElement没有从app.config读取其值?
我正在使用System.Configuration.ConfigurationElement来表示app.config中的一些数据。它正确地检测到该节存在(如果该节不存在,则抛出错误),但从未正确填充该节。对于队列,我只得到一个空集合,而对于睡眠时间,我只得到500个 以下是相关的app.config部分:.net 为什么我的ConfigurationElement没有从app.config读取其值?,.net,configuration,c#-4.0,.net,Configuration,C# 4.0,我正在使用System.Configuration.ConfigurationElement来表示app.config中的一些数据。它正确地检测到该节存在(如果该节不存在,则抛出错误),但从未正确填充该节。对于队列,我只得到一个空集合,而对于睡眠时间,我只得到500个 以下是相关的app.config部分: <serviceBroker sleepTime="1000"> <queues> <queue name="TestQueue" prio
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
这是我的配置部分(我去掉了许多其他工作正常的元素)
能否验证应用程序配置文件是否包含相关的配置节声明?要将配置节映射到实现它的类型,需要类似于以下内容的内容
<configuration>
<configSections>
<section name="SamConfigurationData" type="Namespace.DataConfigurationSection, AssemblyName"/>
</configSections>
<SamConfigurationData>
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
</SamConfigurationData>
</configuration>
能否验证应用程序配置文件是否包含相关的配置节声明?要将配置节映射到实现它的类型,需要类似于以下内容的内容
<configuration>
<configSections>
<section name="SamConfigurationData" type="Namespace.DataConfigurationSection, AssemblyName"/>
</configSections>
<SamConfigurationData>
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
</SamConfigurationData>
</configuration>
我没有发现任何错误,但我必须亲自尝试。这是我正在使用的版本,并将其与现有版本(包括缺少的部分)进行比较。如果您仍然看到发生了可怕的错误,可以将try/catch放在调用GetSection的位置 app.Config:
<configSections>
<section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
</configSections>
<SAM.Configuration.Data>
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
</SAM.Configuration.Data>
我没有发现任何错误,但我必须亲自尝试。这是我正在使用的版本,并将其与现有版本(包括缺少的部分)进行比较。如果您仍然看到发生了可怕的错误,可以将try/catch放在调用GetSection的位置 app.Config:
<configSections>
<section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
</configSections>
<SAM.Configuration.Data>
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
</SAM.Configuration.Data>
它基本上和配置部分的东西没有任何关系,我在Castle.Windsor中的所有东西都接线错误。它总是返回ServiceBrokerConfiguration的空实例,而不是从app.config加载的实例
谢谢大家的帮助 它基本上与配置部分的内容没有任何关系,我在Castle.Windsor中错误地连接了所有内容。它总是返回ServiceBrokerConfiguration的空实例,而不是从app.config加载的实例
谢谢大家的帮助 我假设配置末尾的`只是在stackoverflow中键入时发生的一个输入错误?是的,谢谢,我会清理它的,配置部分是如何定义的?erwin,C#side还是app.config side?@Dugan是从ConfigurationSection继承的类。我假设配置末尾的`只是在stackoverflow中键入时出现的一个打字错误?是的,谢谢,我会清理它的,配置节是如何定义的?erwin,C#side或app.config side?@Dugan是从ConfigurationSection继承的类。它是:另外,我认为XML名称中不能有
字符,因此,SAM.Configuration.Data
不太可能用作配置节元素名称。您的配置是否有名为SAM.Configuration.Data
(或类似)的元素来包含您的serviceBroker
配置?(可能没有看到我最近的编辑)配置对于许多其他元素都可以正常工作,因此我认为
字符不应该是问题所在。是的,这里让我展示我的完整app.config,以避免一些混淆。它确实是:而且,我认为XML名称中不能有
字符,因此SAM.Configuration.Data
不太可能用作配置节元素名。您的配置是否有一个名为SAM.Configuration.Data
(或类似)包含您的serviceBroker
配置?(可能没有看到我最近的编辑)配置对于许多其他元素都可以正常工作,因此我不认为
字符应该是问题所在。是的,这里让我展示我的完整app.config以避免一些混淆
<configSections>
<section name="SAM.Configuration.Data" type="Test.DataConfigurationSection, Test" />
</configSections>
<SAM.Configuration.Data>
<serviceBroker sleepTime="1000">
<queues>
<queue name="TestQueue" priority="1"/>
</queues>
</serviceBroker>
</SAM.Configuration.Data>
public class DataConfigurationSection : ConfigurationSection
{
public const string SectionName = "SAM.Configuration.Data";
private static DataConfigurationSection _configSection;
[ConfigurationProperty("serviceBroker", IsRequired = false)]
public ServiceBrokerConfigurationElement ServiceBroker
{
get
{
return (ServiceBrokerConfigurationElement)this["serviceBroker"];
}
}
public static DataConfigurationSection Section
{
get
{
if (_configSection == null)
{
_configSection = ((DataConfigurationSection) ConfigurationManager.GetSection(SectionName)));
}
return _configSection;
}
}
}
public class ServiceBrokerConfigurationElement : ConfigurationElement
{
[ConfigurationCollection(typeof(ServiceBrokerQueueElement), AddItemName = "queue")]
[ConfigurationProperty("queues", IsRequired = true)]
public ServiceBrokerQueueElementCollection Queues
{
get { return (ServiceBrokerQueueElementCollection)this["queues"]; }
}
[ConfigurationProperty("sleepTime", DefaultValue = (int)500, IsRequired = true)]
public int SleepTime
{
get { return (int)this["sleepTime"]; }
}
}
public class ServiceBrokerQueueElementCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ServiceBrokerQueueElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ServiceBrokerQueueElement)element).Name;
}
public new ServiceBrokerQueueElement this[string name]
{
get
{
return (ServiceBrokerQueueElement)this.BaseGet(name);
}
}
}
public class ServiceBrokerQueueElement : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get
{
return (string)this["name"];
}
set
{
this["name"] = value;
}
}
[ConfigurationProperty("priority", IsRequired = true)]
public int Priority
{
get
{
return (int)this["priority"];
}
set
{
this["priority"] = value;
}
}
}