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

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

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

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

1 Ответ

1 голос
/ 28 марта 2019

Правильно, пространство имен 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 - это экспло, позволяющее добавлять динамические значения во время выполнения.

Обратите внимание, что IRuntimeTypeInfo специализируется ITypeInfoKephas.Reflection пространстве имен), который также является базовым интерфейсом в Kephas.Model. Вы правы в том, что Kephas.Model предоставляет более сложную функциональность, которая может иметь смысл для более сложной модели метаданных, включая сущности, сервисы, действия и любые классификаторы, о которых вы можете подумать, а также загружает модель также из источников, отличных от .NET отражение (JSON, XML, база данных и т. Д.).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...