Domanda

Ho una domanda sulle proprietà della forma della classe DSL.

Creo una sorta di strumento DSL.Voglio avere funzionalità un po 'come nel diagramma di classe.

Ho delle forme nel mio modello.Ho una forma di classe con una parte del compartimento per attributi e operazioni. Nel modello ho una classe di attributi e una classe di operazioni.

Ho creato le proprietà "NameAndType", "Name" e "Type" per gli attributi come nel libro "Sviluppo specifico del dominio con gli strumenti DSL di Visual Studio. Steve Cook, Gareth Jones, Stuart Kent, Alan Cameron Wills "a pagina 404.

Funziona benissimo, ma voglio avere un elenco dinamico per i parametri nella classe operazioni.Qualche tipo di proprietà Collections.

Ora voglio creare la proprietà NameAndType Collections per le opzioni.Voglio scegliere quanti parametri voglio usare nella mia operazione (metodo).Deve essere un elenco dinamico (una sorta di raccolta)

Sai come posso farlo?

Saluti Adam

È stato utile?

Soluzione

risolvo il mio problema.

Lo scrivo su questo forum. Penso che potrebbe essere utile per gli altri .a

Sotto è la mia soluzione:

Allora, volevo creare il mio editor di collezioni come una proprietà in una classe di dominio (E.G. Namepelist)

Ho creato la strega di classe personalizzata ha due campi (stringa _Name, String _Type) e ha getter e Setter per questi campi. Questa è la classe NameType. Possiamo vedere il codice di questa classe qui sotto (sotto è il codice di questa classe):

[Serializable]
public class NameType
{
    public NameType()
    {
    }

    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private string _type;

    public string Type
    {
        get { return _type; }
        set { _type = value; }
    }
 }
.

Questa classe è nello spazio dei nomi principale del progetto DSL.

Successivamente, useremo la classe System.ComponentModel.design.CollenteSeditor, quindi dobbiamo aggiungere un sistema di riferimento.Design ai nostri progetti DSL e DSLPackage.

Quindi, possiamo creare editor personalizzato per la nostra proprietà in classe di dominio. Dobbiamo creare la classe editor nella parte del codice personalizzato nel nostro progetto DSL. Possiamo farlo usando il seguente codice:

public class NameTypeEditor : System.ComponentModel.Design.CollectionEditor
{
    public NameTypeEditor(Type t)
        : base(t)
    {
    }

    public override object EditValue(System.ComponentModel.ITypeDescriptorContext   context, IServiceProvider provider, object value)
    {
        return base.EditValue(context, provider, value);
    }
}
.

Ora, dovremmo aggiungere il nostro tipo personalizzato nel progetto DSL. Possiamo farlo facendo clic con il tasto sinistro del mouse in Explorer DSL sulla radice dell'albero e selezionare "Aggiungi nuovo tipo esterno".

Successivamente dobbiamo compilare il nome come "Elenco" e il namespace come "sistema.Collections.generic". Quindi abbiamo un nuovo tipo come elenco generico di oggetti del nostro tipo di namepe di classe personalizzato.

Successivamente, dobbiamo solo definire nuove proprietà nella nostra DomainClass (ad esempio in DSLDefinition Designer facendo clic con il tasto destro del mouse sulla classe di dominio e scegli Aggiungi-> DomainProperty)

In Proprietà Dobbiamo definire il nome come ad es. Namepelist, selezionare Tipo come elenco, selezionare Tipo come personalizzato e imposta Attributi personalizzati come System.ComponentModel.editor {TypeOf (NameTypeedIn), TypeOf (System.Drawing.design.ITHITEDPeeditor)}

Alla fine dobbiamo definire i metodi per customstorage per la nostra proprietà namepelist che scegliamo nella nostra domainclass.

Possiamo farlo creando la classe parziale di questa classe di dominio e scrivi Metodi SmameTypelistValue e SeleyNetiPelistValue.

public partial class ClassElement
{
    List<NameType> _nameTypeListClassParams = new List<NameType>();

    public List<NameType> GetNameTypeListValue()
    {
        return _nameTypeListClassParams;
    }

    public void SetNameTypeListValue(List<NameType> value)
    {
        if (value != null)
            _nameTypeListClassParams = value;
    }
}
.

Ora abbiamo la raccolta proprietà Namepelist e possiamo modificare la nostra lista di valori NameType in modo semplice.

Trasforma tutto, costruire e eseguilo.

Ho risolto questo problema in questo modo. Spero che questo consiglio ti aiuterà.

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