Как мне сослаться на диаграмму в шаблоне DSL T4?

StackOverflow https://stackoverflow.com/questions/82776

  •  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.
     *
     */
}

Теперь этот код работает просто отлично, если у вас загружена диаграмма.Если ты этого не сделаешь, диаграмма вернется как ноль, и в этом случае мы должны либо загрузить диаграмму явно, либо создать ее динамически.

Здесь я не буду вдаваться в подробности.Может быть, на мой блог когда я немного посплю!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top