Tôi không biết liệu có thể có giá trị mặc định trong ConfigurationElementCollection hay không. (nó không thấy có bất kỳ thuộc tính nào cho giá trị mặc định).
Tôi đoán bạn phải tự mình triển khai điều này. Hãy xem ví dụ bên dưới.
public class Repository : ConfigurationElement
{
[ConfigurationProperty("key", IsRequired = true)]
public string Key
{
get { return (string)this["key"]; }
}
[ConfigurationProperty("value", IsRequired = true)]
public string Value
{
get { return (string)this["value"]; }
}
}
public class RepositoryCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new Repository();
}
protected override object GetElementKey(ConfigurationElement element)
{
return (element as Repository).Key;
}
public Repository this[int index]
{
get { return base.BaseGet(index) as Repository; }
}
public new Repository this[string key]
{
get { return base.BaseGet(key) as Repository; }
}
}
public class MyConfig : ConfigurationSection
{
[ConfigurationProperty("currentRepository", IsRequired = true)]
private string InternalCurrentRepository
{
get { return (string)this["currentRepository"]; }
}
[ConfigurationProperty("repositories", IsRequired = true)]
private RepositoryCollection InternalRepositories
{
get { return this["repositories"] as RepositoryCollection; }
}
}
Dưới đây là cấu hình XML:
<myConfig currentRepository="SQL2008">
<repositories>
<add key="SQL2008" value="abc"/>
<add key="Oracle" value="xyz"/>
</repositories>
</myConfig>
Và sau đó, tại mã của bạn, bạn truy cập vào mục mặc định bằng cách sử dụng sau đây:
MyConfig conf = (MyConfig)ConfigurationManager.GetSection("myConfig");
string myValue = conf.Repositories[conf.CurrentRepository].Value;
Tất nhiên, lớp MyConfig có thể ẩn các chi tiết truy cập các thuộc tính Repositories và CurrentRepository. Bạn có thể có một thuộc tính được gọi là DefaultRepository (của kiểu Repository) trong lớp MyConfig để trả về điều này.
việc kiểm tra này ra: https://stackoverflow.com/questions/43037691/design-to-implement-a-wrapper-for-configurationsection-net-class –