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!

È stato utile?

Soluzione

Non

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top