2013-03-22 79 views
0

我遇到了从自定义配置节加载的问题。加载自定义配置节问题

问题部分是什么。我有两个元素(第一个和第二个),我已经在choice元素中的XSD模式下定义了。用户在配置时只能选择一个。让我们说这样的事情:

<customSection> 
    <First attribute ="test" />  
</customSection> 

<customSection> 
    <Second attribute ="test" attribute2 ="np" /> 
</customSection> 

当我加载配置,在这两种情况下配置元素第一次和第二次将被加载,他们不会为空(对象为空) 。 如何在第一种情况下完成第二个对象为空?

谢谢

+0

具体是什么问题呢?你有什么尝试? – 2013-03-22 17:29:05

+0

在每个实例的第一种情况下,我将加载代码CustomSection对象和第一个对象(作为一个属性)与子属性和第二个对象(作为属性)将不会为空。它将用空属性初始化。我期待第二个对象为null。那就是我想要完成 – Rastko 2013-03-25 12:46:28

回答

0

我发现我需要的东西。每个配置元素具有属性ElementInformation(http://msdn.microsoft.com/en-us/library/system.configuration.elementinformation.aspx),其中还存在属性IsPresent,其指示特定配置元素是否存在于配置文件中。官方说明:

IsPresent:获取一个值,该值指示关联的ConfigurationElement对象是否在配置文件中。

有了这个,我可以跟踪哪些元素被加载,哪些不是。以前我不能说是等于或不等于null。它不会独立于null,而且它具有值。

2

首先创建类映射

public class YourCustomConfig : ConfigurationSection 
{ 
.... 
} 

全样本这里:http://nnish.com/2009/09/17/custom-configuration-section-in-c/

其次,你让你的DATAS

YourCustomConfig section = ConfigurationManager.GetSection("customSection") as YourCustomConfig; 
+0

是的弗雷德里克,我知道。我已经定义了一切。问题在于YourCustomConfig在你的情况下会初始化所有的复杂对象(它的属性),而不管这些对象是否在配置文件中定义。对我而言,预期的行为是将这些对象设置为空,而不是空初始化。 – Rastko 2013-03-25 19:05:21