Kephas.Пакет Model кажется немного тяжеловесным для моих требований к расширяемым метаданным. Есть ли более легкая альтернатива?

#reflection #model #kephas

#отражение #Модель #kephas

Вопрос:

Мое требование — использовать какую-то систему метаданных для объектов, которые мы используем, но расширяемую, что означает, что нам нужно поддерживать какие-то пользовательские метаданные дополнительно к запросам свойств и методов. Стандартные классы Type / TypeInfo в некоторой степени полезны, но их нельзя настроить для добавления определенных свойств для поддержки различных имеющихся у нас шаблонов: узлов дерева, master-detail и других.

Kephas.Модель предоставляет сложную инфраструктуру для поддержки таких случаев, включая расширенные функции, такие как микширование и измерения, но это, однако, немного чересчур для нашей системы. Нам нужно что-то более легкое для объектов, основанных на коде, которые у нас есть.

Есть ли предложения о том, что мы можем использовать для такого рода требований? Я обратил внимание на Kephas.Пространство имен Reflection, и это кажется подходящим кандидатом, но я не уверен, как его правильно использовать.

Ответ №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 предоставляет более сложную функциональность, которая может иметь смысл для более сложной модели метаданных, включая сущности, сервисы, действия и любые классификаторы, о которых вы можете подумать, а также для загрузки модели также из источников, отличных от .Сетевое отражение (JSON, XML, база данных и так далее).

Другой аспект заключается в том, что до версии 5.2.0 IRuntimeTypeInfo будет реализован с помощью класса sealed RuntimeTypeInfo . Начиная с версии 5.3.0, можно будет предоставлять свои собственные реализации, которых может быть несколько.