![]() |
1
1
我已经为我的大部分项目使用并扩展了元数据,其中许多与描述组件、它们之间的关系、映射等相关。 (使用属性的主要类别广泛包括O/R映射器、依赖项注入框架和序列化描述-特别是XML序列化) 好吧,我想请您多描述一点关于要作为资源嵌入的数据的性质。使用属性对于描述您的类型和类型元素的数据类型自然是很好的,但是属性的每种用法都是简单而简短的。属性(我认为)应该很有凝聚力,并且在某种程度上相互独立。 我要指出的解决方案之一是“XML序列化”方法。您可以保留当前的XML,并将它们作为嵌入资源(这可能是您已经做过的)放入程序集中,然后将整个XML一次读取到对象的强类型层次结构中。 在我看来,XML序列化非常简单,比典型的XML API甚至Linq2XML都要简单得多。它使用属性将类属性映射到XML元素和XML属性。一旦将XML加载到对象中,您就可以将内存中所需的所有内容作为“类型化”数据。 根据我从你的描述中了解到的,我认为你有很多数据要放在一个类上。这意味着在类上面有一个大的(在我看来)丑陋的属性代码。(除非您可以在成员之间分发数据,使每个成员都小而独立,这很好。) 我在使用XML序列化处理大量数据方面有很多积极的经验。您可以根据需要排列数据,获得类型安全性,获得智能化(如果您将XSD提供给Visual Studio),还可以获得一半的重构。Resharper(或我所知的任何其他重构工具)无法识别XML序列化,因此当您重构类型化的类时,它不会更改XML本身,而是更改数据的所有用法。 如果你给我更多关于你的数据是什么的细节,我也许能在我的答案中添加一些东西。 对于XML序列化示例,只需谷歌“XML序列化”或在msdn中查找即可。 更新我强烈推荐 不是 使用类来表示数据的实例。甚至使用 班 封装数据违背了它的逻辑定义。 我想您最好的选择是XML序列化,前提是您已经有了XML格式的数据。你可以用更少的代码获得你想要的所有好处。并且可以使用Linq2Objects对XML可序列化对象执行任何查询。 代码的一部分可以如下所示:
你应该打电话
|
![]() |
2
1
从您的描述中不清楚,但听起来您有希望访问的程序集级元数据(与类型级相反)。可以在每个程序集中有一个实现公共接口的类,然后使用反射查找该类并实例化它。然后您可以在其中硬编码元数据。 当然,问题在于XML所带来的好处,即如果没有新的构建,就无法修改元数据。但如果你朝这个方向走,你可能已经考虑到了。 |
![]() |
E.Meir · 支持一个项目的两个以上版本 8 年前 |
![]() |
J86 · Visual Studio 2013找不到当前的DLL 9 年前 |
![]() |
jayt.dev · 如何指向部件引用的位置? 11 年前 |