Come ottenere un riferimento IStereotype in un modello T4?
-
23-09-2019 - |
Domanda
C'è un modo per ottenere un riferimento a un'interfaccia Microsoft.VisualStudio.Uml.Profiles.IStereotype in un template T4? Voglio dire IStereotype che memorizza la definizione dello stereotipo UML, e non IStereotypeInstance che contiene il valore effettivo. Ho provato qualcosa di simile, ma l'ApplicableStereotypes enumereation è vuoto.
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 ) );
}
}
Ho cercato di ottenere IStereotype da ModelStore. Ma proprietà ProfileManager restituisce sempre null e il codice si rompe.
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;
}
}
}
sto stucked. Si prega di aiuto!
Soluzione
Sono così felice di rispondere alla mia domanda, ma il fatto è che il comportamento descritto è " di disegno ". Stavo correndo il codice su un archivio modello caricato su una libreria di classi esterno utilizzando
IModelingProjectReader project = ModelingProject.LoadReadOnly( projectPath )
Il codice funziona perfettamente quando si esegue da un VS Add-in che ha accesso al profilo che viene applicata, caricando gli stereotipi applicabili anche.