1

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

Kephas.Model 提供了一个复杂的基础设施来支持这种情况,包括混合和维度等高级特性,但这对我们的系统来说有点太多了。对于我们拥有的代码优先实体,我们需要更轻量级的东西。

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

4

1 回答 1

1

没错,Kephas.Runtimenamespace 通过基础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扩展,允许在运行时添加动态值。

请注意,IRuntimeTypeInfospecials ITypeInfo(在Kephas.Reflection命名空间中),它也是 中的基本接口Kephas.Model。你是对的,它Kephas.Model提供了一个更复杂的功能,这可能对更复杂的元数据模型有意义,包括实体、服务、活动和你能想到的任何分类器,以及从 .NET 反射以外的源加载模型(JSON、XML、数据库等)。

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

于 2019-03-27T21:19:04.937 回答