Как мне ссылаться на диаграмму в шаблоне 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.
     *
     */
}

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

Я не буду вдаваться в это, здесь. Может быть, в моем блоге, когда я немного поспал!

Другие вопросы по тегам