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?

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top