Kephas.Model 包对于我对可扩展元数据的要求来说似乎有点重。有更轻的选择吗?
The Kephas.Model package seems a bit heavy weight for my requirements of extensible metadata. Is there a lighter alternative?
我的要求是为我们使用的实体使用某种元数据系统,但可扩展,这意味着除了查询属性和方法之外,我们还需要支持某种自定义元数据。标准 Type/TypeInfo 类 在某种程度上是有用的,但是它们不能被定制来添加特定的属性来支持我们拥有的各种模式:树节点、主从和其他。
Kephas.Model 提供了一个复杂的基础设施来支持这种情况,包括混合和维度等高级功能,但这对我们的系统来说有点太多了。对于我们拥有的代码优先实体,我们需要更轻量级的东西。
关于我们可以使用什么来满足这种要求,有什么建议吗?我注意到 Kephas.Reflection 命名空间,这似乎是一个合适的候选者,但我不确定如何正确使用它。
没错,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
提供了更复杂的功能,这可能对更复杂的元数据模型有意义,包括实体、服务、活动和任何你能想到的 classifiers,以及加载模型也来自 .NET 反射以外的来源(JSON、XML、数据库等)。
另一个方面是,直到5.2.0版本,IRuntimeTypeInfo
将由密封的RuntimeTypeInfo
class实现。从5.3.0版本开始,可以提供自己的实现,可以有多个。
我的要求是为我们使用的实体使用某种元数据系统,但可扩展,这意味着除了查询属性和方法之外,我们还需要支持某种自定义元数据。标准 Type/TypeInfo 类 在某种程度上是有用的,但是它们不能被定制来添加特定的属性来支持我们拥有的各种模式:树节点、主从和其他。
Kephas.Model 提供了一个复杂的基础设施来支持这种情况,包括混合和维度等高级功能,但这对我们的系统来说有点太多了。对于我们拥有的代码优先实体,我们需要更轻量级的东西。
关于我们可以使用什么来满足这种要求,有什么建议吗?我注意到 Kephas.Reflection 命名空间,这似乎是一个合适的候选者,但我不确定如何正确使用它。
没错,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
提供了更复杂的功能,这可能对更复杂的元数据模型有意义,包括实体、服务、活动和任何你能想到的 classifiers,以及加载模型也来自 .NET 反射以外的来源(JSON、XML、数据库等)。
另一个方面是,直到5.2.0版本,IRuntimeTypeInfo
将由密封的RuntimeTypeInfo
class实现。从5.3.0版本开始,可以提供自己的实现,可以有多个。