SavableModelBase<> Load/Save - "cleaner" XML 还是配置工具?

SavableModelBase<> Load/Save - "cleaner" XML or configuration tool?

我正在开发一个应该 "plug-able" 的系统 - 用户应该能够指定在其中交互的各个部分 ("composable application")。

作为应用程序的一部分,我有一个"processor"的概念,应该配置相关配置class。

例如:

<processors>
    <processor type="SomeAsm.SomeType1">
        <configuration>
            <SomeType1Prop1>value</SomeType1Prop1>
        </configuration>
    </processor>
    <processor type="OtherAsm.SomeType2">
        <configuration>
            <SomeType2Prop1>value</SomeType2Prop1>
            <SomeType2Prop2>value</SomeType2Prop2>
        </configuration>
    </processor>
</processors>

(当然 SomeAsm.SomeType1OtherAsm.SomeType2 共享一些公共接口或基础 class)

我考虑过使用 System.Configuration 但有一些缺点 - (1) 我必须明确地使用命名空间中的各种 classes (例如 ConfigurationElementConfigurationElementsCollection 等)和 (2) 为了支持 "any" 配置 class 实例,我需要实现一些反序列化时的工厂。

Catel 的(很棒)SavableModelBase<>class 的替代方法是 Save/Load 方法,非常方便且易于使用。我用这种方法看到的唯一缺点是 XML 本身有点 "verbose" 并且很难手动编辑它。

是否有一些方法可以控制文件中省略的 "extra" 标记(例如删除命名空间(xmlns:ctl2="http://schemas.datacontract.org/2004/07/InheritedConfiguration.CatelConfig",然后是 ctl2:SomeType2Prop1)和 graphid(graphid="5")) ?

或者,有没有我可以使用的 "global" 编辑器?

谢谢,

汤姆

Catel 的 xml 有点臃肿的原因是它在底层使用了 DataContractSerializer。从我的头顶来看,序列化程序中有一个优化选项,但不确定是否值得这么麻烦。

您可以查看的另一个选项是 Catel 中的 IConfigurationService,如果它在后台也适合您并存储为 key/value 集合。