CodeSmith基础(八)
编写CodeSmith自定义属性的编辑器(Writing Custom Property Editors)
当你开始编写自定义的CodeSmith模板时,很可能对于使用它的strings或integers属性很满意,但有时你会发现需要创建一个不同类型的属性,可能是一个自定义的类型或者是.NET framework中但是在属性面板中没有提供的类型。在模板中去作这些很简单,但是怎样指定一个类型在运行模板时显示在属性面板中呢?例如创建了一个Person类并且具有很多不同的属性,但是却没有办法让用户去组装这个类……除非创建一个自定义属性编辑器。
属性面板提供了方法去编写自定义的属性编辑器,当用户在面板上选择一个属性时可以激发相应的方法,同时也可以通过编写代码实现提示用户输入一个必要的值。下面我们举个例子,创建一个接受组建的属性并且是用影射循环贯串所有的类,是所有的类都可以使用它和它的方法,去创建一个NUnit测试基础。(这句翻译的不好,原文:As an example we are going to build a template which accepts an assembly as a property and then using reflection loops through all of the classes, and the methods of those classes, to build NUnit test stubs.)
首先,我们来关注一下模板的组件属性,暂且不看自定义编写的代码。模板的第一部分是一些声明定义和属性。将属性放在脚本标签中代替使用属性声明,在下一部分将看到这样做的必要。
2
3<%@ImportNameSpace="System.Reflection"%>
4
5<scriptrunat="template">
6
7privateAssemblyassembly;
8
9publicAssemblyAssemblyToLoad
10{
11get{returnassembly;}
12set{assembly=value;}
13}
14
15</script>
然后我们为组建assembly中的每一个类创建一个类,为每一个类创建他的方法。然后直接将模板的输出内容放入Visual Studio.NET,然后在编写组件的单元测试时使用向导。
2usingNUnit.Framework;
3
4<%
5foreach(TypeTinAssemblyToLoad.GetTypes())
6{
7if(T.IsClass)
8{
9%>
10
11[TestFixture]
12publicclass<%=T.Name%>Tests
13{
14<%
15MethodInfo[]methods=T.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static);
16foreach(MethodInfoMinmethods)
17{
18%>
19
20[Test]
21publicvoid<%=M.Name%>Test
22{
23//TODOWritethistest
24}
25<%
26}
27
28%>}<%
29}
30}
31%>
/Files/Bear-Study-Hard/AssemblyHelper.zip
首先我们需要创建一个继承UITypeEditor的类。
2{
3publicAssemblyFilePicker():base()
4{
5}
6}
关于UITypeEditor的说明请大家参看M<rtx w:st="on">SD</rtx>N或Visual Studio.NET自带帮助中的说明,其中有详细的例子。
然后我们需要重载UITypeEditor类的两个不同的方法。第一个需要重载点的方法是GetEditStyle,这个方法是告诉属性面板对于当前类型是用什么类型的编辑器,在这个例子中我们设置编辑类型为Modal。这样大家可以在该属性格子的右边看到一个小按钮,它将引发一个对话框等模式的对话(trigger a modal dialog)。这是我们的GetEditStyle方法:
2{
3returnUITypeEditorEditStyle.Modal;
4}
其中的Modal为显示一个省略号按钮。
需要重载的另一个方法是EditValue方法,当用户电击属性时会调用这个方法。按照我们需要加载的组件类型需要创建一个打开文件对话框(open file dialog)然后捕获这个对话框,在属性格子中返回对话框的结果。
2{
3
4if(provider!=null)
5{
首先我们要从当前的服务和控件中得到一个参考,有了控件的参考我们可以通过它转到ShowDialog方法。(原文:First we need to get a reference to the current service and control, we need the reference to the control so we can pass it to the ShowDialog method.)
2ControleditorControl=editorServiceasControl;
3
4if(editorControl!=null)
5{
2
3openFileDialog.CheckFileExists=true;
4openFileDialog.DefaultExt=".dll";
5openFileDialog.Multiselect=false;
6openFileDialog.Title="SelectanAssembly:";
7openFileDialog.Filter="AssemblyFiles|*.dll";
2{
3Assemblyassembly=Assembly.LoadFrom(openFileDialog.FileName);
4value=assembly;
5}
6else
7{
8value=null;
9}
10}
11}
12
13returnvalue;
14}
加载这个模板我们仅需将这个组件assembly与模板放在同一目录下,然后再模板中加入下面两行代码。
2<%@ImportNameSpace="AssemblyHelper"%>
然后我们要在组建属性中添加Editor属性,并且指定为UITypeEditor编辑器。
2publicAssemblyAssemblyToLoad
3{
4get{returnassembly;}
5set{assembly=value;}
6}
这个模板仅仅可以编译通过,但是由于我们编写显示了一个类型属性面板并不知道如何去操作它,所以我们没有办法自定义指定组件在加载时想要加载的组件。
我们需要创建一个UITypeEditor,这是一个建立属性面板是用的特殊属性的类。UITypeEditor需要创建在一个和模板分离的组件中,我们是用Visual Studio创建这个类。
相关推荐
CodeSmith基础与应用实例(网页资料打包)
本文档是一个关于 CodeSmith 的基础教程,针对的是 CodeSmith Professional v5.1.3.8510 版本,以 C# 为例进行说明。 首先,我们需要对 CodeSmith 进行必要的设置,以便它能够正确处理中文字符。在工具的选项中,...
本教程将带你深入理解CodeSmith的基础用法,通过一系列详细的网页教程,帮助你掌握其核心概念和功能。 首先,我们从“CodeSmith使用基础教程 一 — 模板”开始。模板是CodeSmith的核心,它定义了生成代码的结构和...
codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip...
CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码...
CodeSmith是一款基于模板的代码生成器,它允许开发人员使用类似于数据库查询语言的标记语言来生成代码。CodeSmith提供了一系列模板,可以用来生成如C#、C++、Java等语言的代码,尤其在生成数据库访问层代码方面,...
CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf ...
这大大减少了手动编写这些基础代码的时间。 CodeSmith支持使用C#语法作为模板语言,使得模板的编写更为直观和强大。你可以利用它提供的各种内置函数和变量,如数据库表信息、字段信息等,来动态生成代码。 总的来...
总的来说,CodeSmith是一个高效能的代码生成工具,通过与数据库的交互和模板引擎,能够帮助开发者快速构建C#项目的基础架构。其丰富的配置选项和多样的运行方式适应了不同开发环境的需求,是提升开发效率的得力助手...
CodeSmith是一款强大的代码生成工具,尤其对于程序员和开发团队来说,它能显著提高开发效率,减少重复编写基础代码的工作量。在标题中提到的"CodeSmith 6.0 + 序列号",指的是该软件的第六个主要版本,并且提供了一...
通过阅读和实践,你可以掌握CodeSmith的基础操作,并逐渐提升到高级应用。 总结,CodeSmith是一个强大的代码生成工具,通过学习和熟练运用,开发者能提高工作效率,降低出错率,专注在更重要的业务逻辑和创新上。...
在codesmith中,模板是生成代码的基础,它们可以是预定义的,也可以由用户自行创建。预定义模板涵盖了如.NET集合类型和存储过程生成等功能。用户通过CodeSmith Studio.exe创建和编辑模板,而CodeSmith Explorer.exe...
"简单的CodeSmith模板"这个主题意味着我们将探讨如何创建一个基础的CodeSmith模板,以理解其工作原理和基本语法。 首先,让我们深入了解CodeSmith模板。模板是CodeSmith的核心,它是由CST(CodeSmith Template)...
此外,CodeSmith还支持模板继承,你可以创建一个基础模板,然后其他模板继承这个基础模板,只关注差异部分,这样维护起来更为方便。 "CodeSmith 4.1 Templates"压缩包内的文件可能是各个特定功能的模板文件,比如...
总的来说,利用CodeSmith生成SpringBoot模板结合MyBatisPlus,可以有效地减少重复编码工作,提升开发效率,让开发者更专注于业务逻辑的实现,而不是基础代码的编写。通过熟练掌握这一技巧,可以为你的项目开发带来极...
CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...
CodeSmith是一款强大的代码生成工具,尤其在提升软件开发效率方面有着显著的作用。它允许开发者通过模板语言来定制自己的代码生成规则,从而自动化地创建出符合特定项目需求的源代码。这款工具广泛应用于国内的开发...
CodeSmith是一款强大的代码生成工具,尤其在快速开发领域有着广泛的应用。版本6.5是它的一个重要里程碑,其中包含了对Nhibernate框架的支持,这使得开发者能够更高效地生成与Nhibernate配合的实体类和数据访问层代码...
CodeSmith是一款强大的代码生成工具,尤其适用于快速生成数据库相关的实体模型、数据访问层以及业务逻辑层代码。在本文中,我们将深入探讨如何解决在使用CodeSmith 8.0时遇到的MySQL实体没有字段注释和表注释的问题...