我有一个基本的插件系统,其中插件dll在主exe的app.config中指定。我想将插件配置添加到主app.config中,如下所示:
<plugins>
<processorPlugins>
<plugin type="PluginType1, PluginAssembly1" />
<plugin type="PluginType2, PluginAssembly2">
<pluginConfig1 attr="..." />
<pluginConfig2>
<pluginOption1 />
<pluginOption2 />
<pluginOption3 />
...
</plugin>
</processorPlugins>
</plugins>
我无法弄清楚如何让它与app.config顶部指定的自定义配置部分很好地配合。
是否有某种加载插件的方法,将插件dll中的自定义部分类型添加到ConfigurationManager或configSections,然后使用这些类型重新解释插件选项?或者另一种方式呢?
答案 0 :(得分:0)
您可以使用ConfigurationSections执行此操作,但是您需要在插件本身的插件本身之外的插件中配置插件。
例如
<configuration>
<configSections>
<sectionGroup name="PluginConfigs">
<section name="PluginConfigs.MyPlugin" type="Plugins.MyPlugin.Config.RootConfigSection, Plugins" />
</sectionGroup>
</configSections>
.......
<plugins>
<processorPlugins>
<plugin Type="MyPlugin, Plugins" Config="Plugins.MyPlugin" />
</processorPlugins>
<plugins>
<PluginConfigs>
<PluginConfigs.MyPlugin SomeConfigValue="">
</PluginConfigs.MyPlugin>
</PluginConfigs>
然后在你的代码中获得配置部分..
public sealed class RootConfigSection : ConfigurationSection
{
private static volatile RootConfigSection instance;
private static volatile object syncRoot = new object();
public static RootConfigSection Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = ConfigurationManager.GetSection("PluginConfigs/PluginConfigs.MyPlugin") as RootConfigSection;
if (instance == null)
{
throw new ConfigurationErrorsException("You must add the PluginConfigs/PluginConfigs.MyPlugin' section to your configuration file");
}
}
}
}
return instance;
}
}