如何在DSL T4模板中引用图表?

时间:2008-09-17 12:49:26

标签: visual-studio diagram dsl

谷歌不会在这里拯救我,我只是知道这是一个非常好的地方。

我正在为DSL编写自定义DirectiveProcessor,我希望能够从我的T4模板中访问图表。

在我的DirectiveProcessor中,我已经使用(等待它......)LoadModelAndDiagram(...)来加载域模型和我的图。

所以,现在将图表加载到Store中的默认分区中,但我不能为我的生活解决如何在以后解析对它的引用。

任何人都可以指导方向吗?

1 个答案:

答案 0 :(得分:2)

嗯,经过大量的进一步工作后,我决定不需要从**自定义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 的形式返回,在这种情况下,我们要么必须明确加载图表,要么动态创建图表。

我不会在这里谈到这一点。我可能在my blog睡觉了!