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

时间:2020-03-05 18:58:45  来源:igfitidea点击:

Google不在这里救我,我只知道这是一个完美的地方。

我正在为DSL编写自定义DirectiveProcessor,并且希望能够从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.
     *
     */
}

现在,如果我们已加载图表,则此代码可以正常工作。如果我们不这样做,则图将返回为null,在这种情况下,我们或者必须显式加载图,或者动态创建一个图。