Como faço referência a um diagrama em um modelo DSL T4?
-
01-07-2019 - |
Pergunta
Não Google está vindo em meu socorro, aqui, e eu só sabe este é o lugar perfeito para perguntar.
Eu estou escrevendo um DirectiveProcessor personalizado para um DSL e eu quero ser capaz de acessar um diagrama de dentro do meu modelo de T4.
Dentro do meu DirectiveProcessor, eu tenho carregado o modelo de domínio e meu diagrama usando (espera para ela ...) LoadModelAndDiagram (...).
Então, agora do carregado na partição padrão na loja, mas eu não posso para a vida de me descobrir como resolver uma referência a ele mais tarde diagrama.
Alguém pode guiar o caminho?
Solução
Bem, depois de muita mais trabalho, eu decidi que não tinha necessidade de acessar meu diagrama ** de dentro ** a DirectiveProcessor personalizado.
Eu ainda tenho um DirectiveProcessor costume porque o padrão não se carregar o diagrama existente quando ele carrega o modelo de domínio gerado.
Conseguir um DirectiveProcessor personalizado para carregar o esquema e modelo, ao mesmo tempo é trivialmente fácil. Você subclasse o padrão gerado classe base DirectiveProcessor e substituição:
protected override bool LoadDiagramData
{
get
{
return true;
}
}
Agora, temos o diagrama carregado, de modo a obter de volta à pergunta original, como podemos acessá-lo? Como esta:
using (Transaction t = partition.Store.TransactionManager
.BeginTransaction("MyTxn", true))
{
MyDslDiagram diagram = partition.ElementDirectory
.FindElements<MyDslDiagram>(true).SingleOrDefault();
/*
* Now, do stuff with your diagram.
*
*/
}
Agora, esse código funciona muito bem se você tiver um diagrama carregado. Se não o fizer, diagrama vai voltar como nulo , caso em que, ou temos de carregar o diagrama de forma explícita ou criar uma dinâmica.
Eu não vou entrar em que, aqui. Talvez em meu blog quando eu tive um pouco de sono!