Как мне сослаться на диаграмму в шаблоне DSL T4?
-
01-07-2019 - |
Вопрос
Google здесь не приходит мне на помощь, и я просто знать это идеальное место, чтобы спросить.
Я пишу пользовательский DirectiveProcessor для DSL, и я хочу иметь возможность доступа к диаграмме из моего шаблона T4.
В моем DirectiveProcessor я загрузил модель предметной области и свою диаграмму, используя (подождите этого ...) LoadModelAndDiagram(...).
Итак, теперь диаграмма загружена в раздел по умолчанию в Хранилище, но я ни за что на свете не смогу придумать, как разрешить ссылку на нее позже.
Может ли кто-нибудь указать путь?
Решение
Что ж, после долгой дальнейшей работы я решил, что мне не нужно получать доступ к моей диаграмме ** изнутри ** пользовательского 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.
*
*/
}
Теперь этот код работает просто отлично, если у вас загружена диаграмма.Если ты этого не сделаешь, диаграмма вернется как ноль, и в этом случае мы должны либо загрузить диаграмму явно, либо создать ее динамически.
Здесь я не буду вдаваться в подробности.Может быть, на мой блог когда я немного посплю!