Pergunta

Eu tenho uma pergunta sobre propriedades de forma de classe DSL.

Eu crio uma espécie de ferramenta DSL.Eu quero ter funcionalidade um pouco como no diagrama de aula.

Eu tenho formas no meu modelo.Eu tenho forma de classe com parte do compartimento para atributos e operações. No modelo, tenho aula de atributo e aula de operação.

Eu criei "nameandtype", "nome" e propriedade "tipo" para atribes como no livro "Desenvolvimento específico do domínio com ferramentas DSL do Visual Studio. Steve Cook, Gareth Jones, Stuart Kent, Alan Cameron Wills "On 404 Page.

Funciona ótimo, mas eu quero ter lista dinâmica para parâmetros na classe de operações.Algum tipo de propriedade de coleções.

Agora eu quero criar uma propriedade de coleções NameanDTYPE para as opções.Eu quero escolher quantos parâmetros eu quero usar em minha operação (método).Que deve ser lista dinâmica (um tipo de coleta)

Você sabe como posso fazer isso?

Cumprimentos Adam

Foi útil?

Solução

Eu resolvo meu problema.

Eu escrevo isso neste fórum. Acho que pode ser útil para outras pessoas. A

Abaixo está minha solução:

Então, eu queria criar meu próprio Editor de coleção como uma propriedade em uma classe de domínio (por exemplo, NameTypeList)

Criei uma classe personalizada que tem dois campos (string _name, string _type) e tem getters e setters para esses campos. Esta é a classe NameType. Podemos ver o código desta classe abaixo (abaixo está o código desta 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; }
    }
 }

Esta classe está no namespace principal do projeto Dsl.

A seguir, usaremos a classe System.ComponentModel.Design.CollectionEditor, portanto, precisamos adicionar uma referência System.Design aos nossos projetos Dsl e DslPackage.

Assim, podemos criar um editor personalizado para nossa propriedade na classe de domínio. Temos que criar uma classe de editor na parte do código personalizado em nosso projeto Dsl. Podemos fazer isso usando o código abaixo:

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);
    }
}

Agora, devemos adicionar nosso tipo personalizado no projeto Dsl. Podemos fazer isso clicando com o botão esquerdo do mouse no DSL Explorer na raiz da árvore e selecione “Adicionar novo tipo externo”.

Em seguida, temos que preencher o nome como “List” e o namespace como “System.Collections.Generic”. Portanto, temos um novo tipo como lista genérica de objetos de nossa classe personalizada NameType.

Depois disso, temos que definir apenas uma nova propriedade em nossa DomainClass (por exemplo, em DslDefinition Designer clicando com o botão direito do mouse em Domain Class e escolhendo Add-> DomainProperty)

Em Propriedades, temos que definir Nome como, por exemplo, NameTypeList, escolha Tipo como lista, escolha Tipo como CustomStorage e defina Atributos personalizados como System.ComponentModel.Editor {typeof (NameTypeEditor), typeof (System.Drawing.Design.UITypeEditor)}

No final, temos que definir métodos para CustomStorage para nossa propriedade NameTypeList que escolhemos em nosso DomainClass.

Podemos fazer isso criando uma classe parcial desta classe de domínio e gravando os métodos GetNameTypeListValue e SetNameTypeListValue.

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;
    }
}

Agora temos Collection Property NameTypeList e podemos editar nossa lista de valores NameType de maneira fácil.

Transforme tudo, crie e execute-o.

Resolvi este problema desta forma. Espero que este conselho o ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top