次のようにDLLを配布したいと思いConfigurationSection
ます。
public class StandardConfiguration : ConfigurationSection
{
public static StandardConfiguration GetInstance()
{
return (StandardConfiguration)ConfigurationManager.GetSection("customConfigSection");
}
[ConfigurationProperty("childConfig")]
public StandardChildConfig ChildConfig
{
get { return (StandardChildConfig)this["childConfig"]; }
set { this["childConfig"] = value; }
}
}
public class StandardChildConfig : ConfigurationElement
{
[ConfigurationProperty("p1")]
public string P1
{
get { return (string)this["p1"]; }
set { this["p1"] = value; }
}
}
ConfigurationSection
とその子をConfigElement
継承可能にしたいと思います。これは、次のようにタイプパラメータを使用して実行できます。
public class StandardConfiguration<TChildConfig> : ConfigurationSection
where TChildConfig : StandardChildConfig
{
[ConfigurationProperty("childConfig")]
public TChildConfig ChildConfig
{
get { return (TChildConfig)this["childConfig"]; }
set { this["childConfig"] = value; }
}
}
public class StandardChildConfig : ConfigurationElement
{
[ConfigurationProperty("p1")]
public string P1
{
get { return (string)this["p1"]; }
set { this["p1"] = value; }
}
}
ただし、これにより、DLL内の他のクラスからの静的Instance
参照ができなくなると思います。これは、子の最終的なタイプがわからないためConfigurationElement
です。
これをよりクリーンに実装する方法についてのアイデアや提案は大歓迎です。
ありがとう。
編集
<customConfigSection>
アプリケーションの構成にが含まれていると仮定すると、最初のシナリオの値にStandardConfiguration.GetInstance().ChildConfig.P1
アクセスするために使用できます。P1
2番目のシナリオで同じ値にアクセスするにはどうすればよいですか?どのように実装しGetInstance()
ますか?
編集2
以下は「ゼロコーディング」シナリオです。
<?xml version="1.0"?>
<configuration>
<configSections>
<section
name="customConfig"
type="WebsiteTemplate.Config.StandardConfigruation, WebsiteTemplate"
/>
</configSections>
<customConfig baseProp1="a">
<childConfig baseProp2="b" />
</customConfig>
</configuration>
そして、これが構成が拡張されたシナリオです。
<?xml version="1.0"?>
<configuration>
<configSections>
<section
name="customConfig"
type="WebsiteTemplate.Extended.Config.ExtendedConfigruation, WebsiteTemplate.Extended"
/>
</configSections>
<customConfig baseProp1="a" extendedProp1="c">
<childConfig baseProp2="b" extendedProp2="d" />
</customConfig>
</configuration>