DSL 工具 NameAndType 动态列表
我有关于 DSL 类形状属性的问题。
我创建了一种 DSL 工具。我想要的功能有点像类图中的功能。
我的模型中有形状。我有类形状,其中包含属性和操作的隔间部分。 在模型中,我有属性类和操作类。
我为书中的属性创建了“NameAndType”、“Name”和“Type”属性 “使用 Visual Studio DSL 工具进行特定领域的开发。 Steve Cook、Gareth Jones、Stuart Kent、Alan Cameron Wills”在 404 页上。
它工作得很好,但我想在操作类中拥有参数的动态列表。某种 Collections 属性。
现在我想为操作创建 NameAndType Collections 属性。 一种集合)
你知道我该怎么做吗?
我想选择在我的操作(方法)中使用多少个参数,这必须是动态列表( 亚当
I have a question about DSL Class Shape Properties.
I create a kind of DSL Tool. I want to have functionality a little bit like in class diagram.
I have shapes in my model. I have Class Shape with compartment part for attributes and operations.
In model I have attribute class and operation class.
I created "NameAndType", "Name" and "Type" property for atributtes like in book
"Domain-Specific Development with Visual Studio DSL Tools.
Steve Cook, Gareth Jones, Stuart Kent, Alan Cameron Wills" on 404 page.
It works great but I want to have dynamic list for parameters in operations class. Some kind of Collections property.
Now I want to create NameAndType Collections property for opeations. I want to choose how many parameters I want to use in my operation(method). That must be dynamic list (a kind of collection)
Do you know how can I do this?
Regards
Adam
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我解决我的问题。
我把这个写在这个论坛上。我认为这可能对其他人有帮助。
下面是我的解决方案:
所以,我想创建自己的集合编辑器,就像域类中的属性(例如NameTypeList)一样,
我创建了具有两个字段(string _name、string _type)的自定义类) 并为这些字段提供 getter 和 setter。这是 NameType 类。我们可以在下面看到这个类的代码(下面是这个类的代码):
这个类位于Dsl项目的主命名空间中。
接下来,我们将使用 System.ComponentModel.Design.CollectionEditor 类,因此我们需要将引用 System.Design 添加到我们的 Dsl 和 DslPackage 项目中。
因此,我们可以为域类中的属性创建自定义编辑器。我们必须在 Dsl 项目的自定义代码部分中创建编辑器类。
我们可以使用下面的代码来做到这一点:
现在,我们应该在 Dsl 项目中添加自定义类型。我们可以通过在树根上的 DSL Explorer 中单击鼠标左键并选择“添加新外部类型”来完成此操作。
接下来,我们必须将名称填写为“List”,将命名空间填写为“System.Collections.Generic”。因此,我们有新类型作为自定义类 NameType 的对象的通用列表。
之后,我们只需在 DomainClass 中定义新的 Property(例如,在 DslDefinition Designer 中,在 Domain Class 上单击鼠标右键,然后选择 Add->DomainProperty)。
在 Properties 中,我们必须将 Name 定义为例如 NameTypeList,选择 Type 作为 List ,选择 Kind 作为 CustomStorage 并设置自定义属性,如 System.ComponentModel.Editor {typeof(NameTypeEditor), typeof(System.Drawing.Design.UITypeEditor)}
最后我们必须定义我们在 DomainClass 中选择的属性 NameTypeList 的 CustomStorage 方法。
我们可以通过创建此域类的分部类并编写 GetNameTypeListValue 和 SetNameTypeListValue 方法来做到这一点。
现在我们有了集合属性 NameTypeList,我们可以轻松地编辑 NameType 值列表。
改造一切、构建并运行它。
我用这种方法解决了这个问题。我希望这个建议对你有帮助。
I resolve my problem.
I write down this on this forum. I think it might be helpful for others .A
Below is my solution:
So, I wanted to create my own Collection Editor like a property in a Domain Class (e.g. NameTypeList)
I created custom class witch have two fields (string _name, string _type) and have getters and setters for these fields. This is NameType Class . We can see code of this class below (Below is the code of this class):
This class is in the main namespace of Dsl project.
Next, we will use System.ComponentModel.Design.CollectionEditor class, so we need to add a reference System.Design to our Dsl and DslPackage projects.
So, we can create custom editor for our Property in Domain Class. We have to create editor class in custom code part in our Dsl project.
We can do that using below code:
Now, we should add our custom type in Dsl project. We can do that by clicking the left mouse button in DSL Explorer on the root of tree and select “Add New External Type”.
Next we have to fill in Name as “List” and Namespace as “System.Collections.Generic”. So we have new type as generic list of objects of our custom class NameType.
After that, we have to only define new Property in our DomainClass (e.g. in DslDefinition Designer by clicking the right mouse button on Domain Class and choose Add->DomainProperty)
In Properties we have to define Name as e.g NameTypeList, choose Type as List, choose Kind as CustomStorage and set Custom Attributes like System.ComponentModel.Editor {typeof(NameTypeEditor), typeof(System.Drawing.Design.UITypeEditor)}
In the end we have to define methods for CustomStorage for our property NameTypeList that we choose in our DomainClass.
We can do that by creating partial class of this Domain Class and write GetNameTypeListValue and SetNameTypeListValue methods.
Now we have Collection Property NameTypeList and we can edit our list of NameType values in easy way.
Transform all, build and run it.
I solved this problem in this way. I hope this advice will help you.