Как мне ссылаться на диаграмму в шаблоне DSL T4?
Google не придет мне на помощь, и я просто знаю, что это идеальное место, чтобы спросить.
Я пишу пользовательский DirectiveProcessor для DSL и хочу получить доступ к диаграмме из моего шаблона T4.
В моем DirectiveProcessor я загрузил модель домена и мою диаграмму, используя (подождите...) LoadModelAndDiagram(...).
Итак, теперь диаграмма загружена в раздел по умолчанию в Магазине, но я не могу до конца понять, как разрешить ссылку на нее позже.
Кто-нибудь может направить путь?
1 ответ
Что ж, после продолжительной работы я решил, что мне не нужен доступ к моей диаграмме ** из ** пользовательского DirectiveProcessor.
У меня все еще есть пользовательский DirectiveProcessor, потому что стандартный сгенерированный не загружает существующую диаграмму при загрузке модели предметной области.
Получить пользовательский DirectiveProcessor для одновременной загрузки диаграммы и модели очень просто. Вы создаете подкласс стандартного сгенерированного базового класса DirectiveProcessor и переопределяете:
protected override bool LoadDiagramData
{
get
{
return true;
}
}
Теперь у нас есть загруженная диаграмма, поэтому, чтобы вернуться к первоначальному вопросу, как нам получить к ней доступ? Как это:
using (Transaction t = partition.Store.TransactionManager
.BeginTransaction("MyTxn", true))
{
MyDslDiagram diagram = partition.ElementDirectory
.FindElements<MyDslDiagram>(true).SingleOrDefault();
/*
* Now, do stuff with your diagram.
*
*/
}
Теперь этот код работает отлично, если у вас есть загруженная диаграмма. Если вы этого не сделаете, диаграмма вернется к нулю, и в этом случае мы должны либо загрузить диаграмму явно, либо создать ее динамически.
Я не буду вдаваться в это, здесь. Может быть, в моем блоге, когда я немного поспал!