回顾这篇文章
https://stackoverflow.com/a/9874735/1462656
我正在考虑做类似的事情,让我的所有插件使用包含属性名称和值对的字典的接口公开可配置的proerties。
但是我的问题是如何将属性组合在一起,或者如何单独收集可能各自代表不同设置的属性。
例如,假设我有一个用户可以插入不同处理器的应用程序。每个处理器的行为都完全不同。
处理器1具有这些设置
<Target location="1" action="dosomething" option="4">
<Target location="2" action="dosomething" option="4">
...and so on
我可能代表使用字典集合 也许像是
List<Dictionary<string,string>>
但是我说处理器2的设置完全不同
<Key persist="true">
<ValueFrom location="1" />
<ValueFrom location="4" />
<ValueFrom location="7" />
</Key>
我不知道在上面链接的原始帖子中,我可以在简单的词典中表示所有可配置的项目。除非我用不同的键表示每个子级别?它还能用吗?
此外,如果你确实有一个设置层次结构,你如何告诉GUI这个,以便它可以创建适当的控件来显示它?
答案 0 :(得分:1)
当我最近做了类似的事情时,我问自己最重要的问题(我认为)是主机应用程序(在您的情况下是GUI)需要访问查看或修改插件设置?
在我的情况下答案是,不,所以我可以忘记所有关于什么数据或每个插件如何存储它的细节,并简单地提供一个容器来存储它。插件的属性被检索As Object
,序列化,存储或我需要做的其他任何事情,然后在下次实例化时发送回插件。完全取决于插件来决定存储哪些属性,如何存储它们(变量,类等等),以及随后在接收其属性时从Object
进行转换。
如何允许用户更改这些属性是一个很好的因素:&#39;漂亮&#39;你想要的东西,但在我的情况下,我选择了一个PropertyGrid(我的是一个WinForms项目)。通过这种方式,插件可以准确地公开每个属性的选择,包括描述,帮助文本和TypeConverters。虽然它不是最具吸引力的界面,但在预先包装的完整性方面却是如此。它非常强大。