gpt4 book ai didi

c# - app.config 的自定义配置 - 部分集合?

转载 作者:太空狗 更新时间:2023-10-29 17:52:29 24 4
gpt4 key购买 nike

我的头好痛!我以前做过这个,但没有像这个那样“深入”或复杂,我尝试了不同的方法来实现这一点,但都失败了。

所以,这是我想要在 app.config 中使用的自定义 XML:

<Profiles> <!--Collection-->
<Profile Name="Live">
<Components>
<Component Name="Portal" Type="Web" />
<Component Name="Comms" Type="Web" />
<Component Name="Scheduler" Type="WindowsService" ServiceName="LiveScheduler" />
</Components>
<Databases>
<Database Name="Main" Connection="Data Source=.\SQL2008" />
<Database Name="Staging" Connection="Data Source=SomeSite.co.uk" />
</Databases>
</Profile>
<Profile Name="Test">
<Components>
<Component Name="Portal" Type="Web" />
<Component Name="Comms" Type="Web" />
<Component Name="Scheduler" Type="WindowsService" ServiceName="TestScheduler" />
</Components>
<Databases>
<Database Name="Main" Connection="Data Source=.\SQL2008" />
<Database Name="Staging" Connection="Data Source=Internal" />
</Databases>
</Profile>
</Profiles>

所以 Profile 的集合,每个 profile 都有一个子元素的集合(Components 是一个集合,然后 Component 是一个元素)

但是,除了多个配置文件之外,我目前拥有所有这些。我确实看到了问题,但不确定如何“修复”它。

代码:

public class Profile : ConfigurationSection
{
[ConfigurationProperty("Name", IsRequired=true)]
public string Name
{
get
{
return base["Name"] as string;
}
set
{
base["Name"] = value;
}
}

[ConfigurationProperty("Components")]
public ComponentCollection Components
{
get { return ((ComponentCollection)(base["Components"])); }
}

[ConfigurationProperty("Databases")]
public DatabaseCollection Databases
{
get
{
return ((DatabaseCollection)(base["Databases"]));
}
}
}

[ConfigurationCollection(typeof(Component), AddItemName="Component")]
public class ComponentCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new Component();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((Component)(element)).Name;
}

public Component this[int idx]
{
get
{
return base.BaseGet(idx) as Component;
}
set
{
if (base.BaseGet(idx) != null)
{
base.BaseRemoveAt(idx);
}
this.BaseAdd(idx, value);
}
}

public Component this[string key]
{
get
{
return base.BaseGet(key) as Component;
}
set
{
if (base.BaseGet(key) != null)
{
base.BaseRemove(key);
}
this.BaseAdd(this.Count, value);
}
}
}

public class Component : ConfigurationElement
{
[ConfigurationProperty("Type", IsRequired = true)]
public string Type
{
get
{
return this["Type"] as string;
}
set
{
this["Type"] = value;
}
}

[ConfigurationProperty("Name", IsRequired = true, IsKey = true)]
public string Name
{
get
{
return this["Name"] as string;
}
set
{
this["Name"] = value;
}
}

[ConfigurationProperty("ServiceName", IsRequired = false)]
public string ServiceName
{
get
{
return this["ServiceName"] as string;
}
set
{
this["ServiceName"] = value;
}
}
}

[ConfigurationCollection(typeof(Database), AddItemName = "Database")]
public class DatabaseCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new Database();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((Database)(element)).Name;
}


public Database this[int idx]
{
get
{
return base.BaseGet(idx) as Database;
}
set
{
if (base.BaseGet(idx) != null)
{
base.BaseRemoveAt(idx);
}
this.BaseAdd(idx, value);
}
}

public Database this[string key]
{
get
{
return base.BaseGet(key) as Database;
}
set
{
if (base.BaseGet(key) != null)
{
base.BaseRemove(key);;
}

this.BaseAdd(this.Count, value);
}
}
}

public class Database : ConfigurationElement
{
[ConfigurationProperty("Name", IsKey = true, IsRequired = true)]
public string Name
{
get
{
return this["Name"] as string;
}
set
{
this["Name"] = value;
}
}

[ConfigurationProperty("Connection", IsKey = false, IsRequired = true)]
public string Connection
{
get
{
return this["Connection"] as string;
}
set
{
this["Connection"] = value;
}
}
}

最佳答案

您需要将您的配置部分上移一个级别。

public class Profiles : ConfigurationSection
{
[ConfigurationProperty("Profile")]
public ProfileCollection Profile
{
get
{
return this["profile"] as ProfileCollection;
}
}
}

这是我创建的部分。您应该能够通过以下操作使您的工作正常进行:

public class ImportConfiguration : ConfigurationSection
{
[ConfigurationProperty("importMap")]
public ImportMapElementCollection ImportMap
{
get
{
return this["importMap"] as ImportMapElementCollection;
}
}
}

public class ImportColumnMapElement : ConfigurationElement
{
[ConfigurationProperty("localName", IsRequired = true, IsKey = true)]
public string LocalName
{
get
{
return this["localName"] as string;
}
set
{
this["localName"] = value;
}
}

[ConfigurationProperty("sourceName", IsRequired = true)]
public string SourceName
{
get
{
return this["sourceName"] as string;
}
set
{
this["sourceName"] = value;
}
}
}

public class ImportMapElementCollection : ConfigurationElementCollection
{
public ImportColumnMapElement this[object key]
{
get
{
return base.BaseGet(key) as ImportColumnMapElement;
}
}

public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}

protected override string ElementName
{
get
{
return "columnMap";
}
}

protected override bool IsElementName(string elementName)
{
bool isName = false;
if (!String.IsNullOrEmpty(elementName))
isName = elementName.Equals("columnMap");
return isName;
}

protected override ConfigurationElement CreateNewElement()
{
return new ImportColumnMapElement();
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((ImportColumnMapElement)element).LocalName;
}
}

关于c# - app.config 的自定义配置 - 部分集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7203557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com