Простейшим способом обеспечить поддержку Динамических Реквизитов в бизнес-классе является наследование от базовых сущностей, которые уже реализуют такую возможность.

 

using DevExpress.ExpressApp;

using DevExpress.Xpo;

using Xafari.BC.Xpo;

 

namespace Xafari.FeatureCenter.DynamicProperties

{

  public class DynamicParametersObject : PersistentXafariBaseObject

   {

      public DynamicParametersObject(Session session) : base(session) { }

      private string _name;

 

      public string Name

       {

          get { return _name; }

          set { SetPropertyValue("Name", ref _name, value); }

       }

   }

}

 

В общем случае, следует реализовать интерфейс IInstancePropertiesSupport.

Вышеприведенная диаграмма классов реализована для XPO и Domain Components, в том и другом случаях имеются персистентные и не персистентные реализации.


Xafari.BC.Xpo Module

Xafari.BC.DC Module

IInstancePropertiesSupport

XafariBaseObject (abstract)

DynamicObjectBase

NonPersistentXafariBaseObject

PersistentDynamicObject

PersistentXafariBaseObject

XafariObject

IInstanceProperty

InstancePropertyBase (abstract)

DynamicPropertyBase

XpoNonPersistentDynamicProperty

PersistentDynamicProperty

XpoPersistentDynamicProperty


Обращаться к динамическим свойствам через интерфейс IInstancePropertiesSupport.

Работа с DynamicPropertiesObject

Xafari.BC.DynamicProperties.DynamicPropertiesObject предоставляет основные возможности для работы с Динамическими Реквизитами. Когда требуется некий специальный не персистентный класс с динамическим набором свойств, то удобнее всего использовать его.

Методы CreateObject и CreateObject<T>

В этих методах необходимо уделить внимание необязательному параметру key типа System.Object. Дело в том, что модификация коллекции DynamicPropertiesList или модификация полей Type и(или) Name элементов этой коллекции влечет перегенерацию DynamicPropertiesObject. Поэтому, по умолчанию, при генерации объектов DynamicPropertiesObject на основании коллекции свойств вычисляется специальный ключ. Таким образом, фреймворк может решить, требуется ли перегенерация DynamicPropertiesObject или можно воспользоваться существующим экземпляром. Объект будет сгенерирован заново в следующих случаях:

Метод CreateDetailView

Метод возвращает Detail View для экземпляра DynamicPropertiesObject. Используется в редакторах Xafari для отображения списка Динамических Реквизитов. Параметр modelHandler типа Action<IModelDetailView> позволяет подробно настроить отображение Динамических Реквизитов.