对于我对可扩展元数据的要求,Kephas.Model包似乎有些沉重。有更轻巧的选择吗?

时间:2019-03-27 09:45:18

标签: reflection model kephas

我的要求是为我们使用的实体使用某种元数据系统,但该实体是可扩展的,这意味着除了查询属性和方法外,我们还需要支持某种自定义元数据。标准的Type / TypeInfo类在某种程度上很有用,但是无法对其进行自定义以添加特定的属性来支持我们拥有的各种模式:树节点,主从细节等。

Kephas.Model提供了一个复杂的基础结构来支持这种情况,包括诸如混合功能和维度之类的高级功能,但是这对于我们的系统来说有点太多了。对于我们拥有的代码优先型实体,我们需要更轻巧的东西。

对于这种需求我们有什么建议?我注意到Kephas.Reflection命名空间,这似乎是一个合适的候选者,但是我不确定如何正确使用它。

1 个答案:

答案 0 :(得分:1)

是的,Kephas.Runtime名称空间通过基本的IRuntimeTypeInfo接口(在Kephas.Core包中)提供了轻量级的可扩展元数据。使用扩展方法访问它主要有两种方法:

    // get the type information from an object/instance.
    var typeInfo = obj.GetRuntimeTypeInfo();

    // convert a Type/TypeInfo to a IRuntimeTypeInfo
    typeInfo = type.AsRuntimeTypeInfo();

从这里开始,您可以操作属性,字段,方法,注释(属性)等,这些属性,属性,字段,方法,注释(属性)等通常通过名称来索引。一个非常不错的功能是IRuntimeTypeInfo是一个expando,允许在运行时添加动态值。

请注意,IRuntimeTypeInfo专用于ITypeInfo(在Kephas.Reflection名称空间中),这也是Kephas.Model中的基本接口。没错,Kephas.Model提供了更复杂的功能,这对于更精细的元数据模型(包括实体,服务,活动以及您可以想到的任何分类器)有意义,以及还可以从其他来源加载模型比.NET反射(JSON,XML,数据库等)要好。

另一方面是,在版本5.2.0之前,IRuntimeTypeInfo将由密封的RuntimeTypeInfo类实现。从5.3.0版开始,可以提供自己的实现,可以不止一个。