Автоматическое создание и настройка класса Sitecore Glass Mapper [SitecoreType()]

Я использую Glass Mapper V4 с Sitecore 7.2, который связан с TDS. TDS используется для автоматического создания всех моих моделей Glass Mapper. Я также создал несколько частичных классов для расширения классов Glass Mapper, созданных TDS. Все идет нормально.

У меня есть веб-форма на веб-сайте, которую я хочу использовать кеширование Glass Mapper. Здесь мы можем увидеть, что сгенерировал TDS:

    [SitecoreType(TemplateId=ISenior_Surf_Day_Survey_PageConstants.TemplateIdString)] //, Cachable = true
public partial class Senior_Surf_Day_Survey_Page  : GlassBase, ISenior_Surf_Day_Survey_Page 
{

Вы можете видеть, что //, Cachable = true закомментировано генерацией кода.

Поскольку я не могу вручную редактировать файл, сгенерированный кодом TDS, со всеми классами Glass Mapper, я попытался добавить кэшируемый атрибут в свой ручной расширенный частичный класс.

    [SitecoreType(Cachable = true)]
public partial class Senior_Surf_Day_Survey_Page
{

Однако это приводит к ошибке компиляции:
Ошибка CS0579 Повторяющийся атрибут SitecoreType.

Мой вопрос: как я могу добавить кэшируемый атрибут с моделями, сгенерированными кодом?


person Mike LeVasseur    schedule 14.09.2015    source источник
comment
Разве вы не можете просто изменить шаблоны T4, которые используются для генерации кода модели?   -  person Richard Seal    schedule 14.09.2015
comment
Можете ли вы настроить шаблоны T4 для установки кэшируемого значения для определенного шаблона? Мне не обязательно нужен этот параметр для всех создаваемых классов.   -  person Mike LeVasseur    schedule 14.09.2015


Ответы (1)


Вы можете использовать поле «Пользовательские данные» на вкладке свойств элемента TDS, чтобы указать, что определенный класс создается с включенным кэшированием.

Поле «Пользовательские данные» отформатировано как строка запроса, поэтому вы можете добавить к нему что-то вроде «cacheable=true» (разделенное амперсандом, если у вас несколько пар ключ/значение).

Чтобы заставить это работать с генерацией кода, вам нужно специально искать этот пользовательский ключ данных во время генерации, а затем применять соответствующую перегрузку атрибута [SitecoreType(Cachable = true)].

Если вы используете предоставленные примеры файлов .tt из TDS, у вас должна быть уже определена вспомогательная функция под названием «GetCustomProperty». Вы можете использовать эту функцию в файле item.tt для создания соответствующего атрибута SitecoreType:

<# if (GetCustomProperty(template.Data, "cacheable") == "true") { #>
    [SitecoreType(Cacheable = true)]
<# } else { #>
    [SitecoreType]
<# } #>
person Chris Smith    schedule 14.09.2015
comment
Насколько мне известно, есть ли другие способы приблизиться к этому. Например, можно ли использовать Fluent для добавления сопоставления атрибута с определенным классом модели, который был сгенерирован кодом? - person Mike LeVasseur; 14.09.2015
comment
Да, я верю, что это возможно. Вы можете ознакомиться с официальным руководством, чтобы узнать, как настроить каждое из свойств атрибута SitecoreType, здесь: glass.lu/Mapper/Sc/Tutorials/Tutorial8 Однако вам может потребоваться быть осторожным, если вы планируете использовать оба подхода в одном решении. Хотя я на самом деле не пробовал это, я считаю, что вы можете указать оба типа конфигураций в GlassMapperScCustom.GlassLoaders, но в зависимости от порядка ваших загрузчиков один может перезаписать другой. - person Chris Smith; 14.09.2015