2010-03-02 21 views
1

Existe-t-il un moyen d'obtenir une référence à l'interface Microsoft.VisualStudio.Uml.Profiles.IStereotype dans un modèle t4? Je veux dire IStereotype qui stocke la définition du stéréotype UML, et non IStereotypeInstance qui contient la valeur réelle. J'ai essayé quelque chose comme ça, mais l'énumération ApplicableStereotypes est vide.Comment obtenir une référence IStérotype dans un modèle T4?

void WriteClassAttributes(IClass classItem) 
{ 
    foreach(IStereotypeInstance stereoInst in classItem.AppliedStereotypes) 
    { 
     this.WriteLine(string.Format("{0} = {1}", stereoInst.Profile, stereoInst.Name)); 
    } 
    foreach(IStereotype stereo in classItem.ApplicableStereotypes) 
    { 
     this.WriteLine(string.Format("{0} = {1}", stereo.Profile.Name, stereo.Name)); 
    } 
} 

J'ai essayé d'obtenir IStereotype à partir de ModelStore. Mais la propriété ProfileManager renvoie toujours null et le code se brise.

string GetDefaultValue(IStereotypePropertyInstance stereoProp) 
{ 
    IModelStore modelStore = stereoProp.GetModelStore(); 
    Microsoft.VisualStudio.Uml.Profiles.IProfile profile = 
     modelStore.ProfileManager.GetProfileByName(profileName); 

    foreach(IStereotype stereo in profile.Stereotypes) 
    { 
     if(stereo.Name == stereoProp.StereotypeInstance.Name ) 
     { 
      return stereo.DefaultValue; 
     } 
    } 
} 

Je suis coincé. S'il vous plaît aider!

Répondre

0

Je ne suis pas si heureux de répondre à ma propre question, mais le fait est que le comportement décrit est "par conception". je courais le code sur un magasin de modèle chargé sur une bibliothèque de classe externe en utilisant

IModelingProjectReader project = ModelingProject.LoadReadOnly(projectPath) 

Le code fonctionne parfaitement lors de l'exécution d'un VS Add-in qui a accès au profil qui est appliqué, le chargement du lieu stéréotypes aussi.