Question

Google ne vient pas à mon secours, et je simplement savoir que c'est le lieu idéal pour poser la question.

J'écris un DirectiveProcessor personnalisé pour un DSL et je veux pouvoir accéder à un diagramme à partir de mon modèle T4.

Dans mon directiveProcessor, j'ai chargé le modèle de domaine et mon diagramme avec (attendez-le ...) LoadModelAndDiagram (...).

Le diagramme est donc chargé dans la partition par défaut de la banque, mais je ne peux pas me débrouiller toute seule pour savoir comment résoudre une référence plus tard.

Quelqu'un peut-il guider le chemin?

Était-ce utile?

La solution

Après de nombreux travaux, j’ai décidé que je n’avais pas besoin d’accéder à mon diagramme ** depuis ** un processeur de directive personnalisé.

J'ai toujours un directiveProcessor personnalisé car le standard généré ne charge pas le diagramme existant lorsqu'il charge le modèle de domaine.

Il est trivial de demander à un processeur de directives personnalisé de charger le diagramme et le modèle en même temps. Vous sous-classez la classe de base DirectiveProcessor générée standard et substituez:

protected override bool LoadDiagramData
{
    get
    {
        return true;
    }
}

Le diagramme est chargé. Pour revenir à la question initiale, comment y avons-nous accès? Comme ceci:

using (Transaction t = partition.Store.TransactionManager
           .BeginTransaction("MyTxn", true))
{
    MyDslDiagram diagram = partition.ElementDirectory
        .FindElements<MyDslDiagram>(true).SingleOrDefault();

    /*
     * Now, do stuff with your diagram.
     *
     */
}

Maintenant, ce code fonctionne très bien si vous avez un diagramme chargé. Si vous ne le faites pas, diagramme reviendra sous la forme null , auquel cas nous devrons soit le charger explicitement, soit en créer un de manière dynamique.

Je n'entrerai pas dans les détails ici. Peut-être sur mon blog quand j'ai dormi un peu!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top