Как мне ссылаться на диаграмму в шаблоне DSL T4? - PullRequest
2 голосов
/ 17 сентября 2008

Google не придет мне на помощь, и я просто знаю , это идеальное место, чтобы спросить.

Я пишу пользовательский DirectiveProcessor для DSL и хочу получить доступ к диаграмме из моего шаблона T4.

В моем DirectiveProcessor я загрузил модель домена и мою диаграмму, используя (подождите ...) LoadModelAndDiagram (...).

Итак, теперь диаграмма загружена в раздел по умолчанию в Магазине, но я не могу понять, как разрешить ссылку на нее позже.

Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 20 сентября 2008

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

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

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

...