如何在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,在这种情况下,我们或者必须显式加载图,或者动态创建一个图。