CodeSmith终极玩法

CodeSmith是一个模仿asp.net运行机制的代码生成器,  运行时分析模板(相当aspx文件)的预编译指令和主体内容, 生成一个继承自CodeSmith.Engine.CodeTemplate(相当于System.Web.UI.Page)或者一个在Inherites预编译指令指定的类(相当于CodeBehind类)的源码, 且把它编译. 然后把这个类绑定到一个PropertyGrid, 让用户编辑参数后执行生成类的__RenderMethod1(相当于Render)方法生成最终代码. 这种模式很好的把易变的生成内容和相对稳定的用于的生成代码的数据源隔离开来.

我认识的大多数CodeSmith用户都是根据数据库结构去生成实体类, 存储过程或者asp.net的界面, 而CodeSmith本身提供了SchemaExplorer用于读取数据库结构, 在模板的预编译指令声明类型为SchemaExplorer.TableSchema的属性即可使用. 而大多数模板都是利用SchemaExplorer去获得数据库结构.

PropertyGrid是用户和根据模板生成的类之间互动的桥梁, 通过在属性或者属性所属类型上标记EditorAttribute可以任意扩展该属性在PropertyGrid里的表现形式, 详细情况请参考http://www.microsoft.com/china/msdn/archives/library/dndotnet/html/usingpropgrid.asp

然而CodeSmith并不支持在模板里定义的属性标记Attribute, 即使有, 在CodeSmithStudio里写这么复杂的代码也不方便. 解决方法就是自己在vs.net写一个模板的基类(必须从CodeSmith.Engine.CodeTemplate继承), 然后通过指定Inherites关键字让模板从基类继承, 这时就可以利用EditorAttribute为所欲为了. 我做了一个可以用来生成多个nhibernate实体类, xml映射和aspx界面的模板基类, 还可以把填写的内容序列化到xml文件和从xml文件反序列化. 我并没有用TableSchema去做生成代码的数据源, 而是有自定义的数据结构, 并且可以手工用XtraGrid去编辑, 当然也可以利用SchemaExplorer去从数据库取结构. 这个基类的结构如下:             

ClassGenerator
+ Assembly
+ Namespace
+ Classes
◆------->
0        *
Class 
+ Attributes
+ Comments
+ Fields
◆------->
0        *
 Field
+ Name
+ DataType
+ MappingType
+ AllowNull
    ......


ClassGenerator还有3个特殊属性SelectedClasses, Save, Load. 它们没有任何意义, 只是利用它们标记的EditorAttribute执行用SchemaExplorer一次选择多个表, 把编辑的内容保存成xml和从xml加载的功能

cst1.PNGcst2.PNGcst3.PNG

源码及模板

btw: 我用XtraGrid时遇到问题, 删除一列时被选中列就会往后跳一条, 结果就是删到倒数第二条时会出现索引超出范围的错误, 谁知道怎么解决?

转载于:https://www.cnblogs.com/Yok/archive/2005/06/23/179938.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bom与dom

区别 BOM(Browser Object Model) BOM 即浏览器对象模型,BOM没有相关标准,BOM的最核心对象是window对象。window对象既为javascript访问浏览器提供API,同时在ECMAScript中充当Global对象。BOM和浏览器关系密切&#xff…

有些事不用听别人的

今天在群里跟几个朋友聊天,然后说了自己的想法,最近很多人在说公众号不会有好的发展,写文章也是没有出路的。不过这个是事实。短视频才是可能是出路,短视频是个很大的蛋糕,从表达方式上来说,视频的表达方式…

25个优秀的设计机构网站设计案例

今天,我们一起来欣赏网站设计工作室自己的网站。设计公司的网站除了要能够吸引客户以外,还要通过他们自己的网站向客户展示他们的设计理念和风格。这里收集的25个优秀的设计机构网站既有清爽简洁风格的,也有色彩丰富,图文并茂的&a…

一个适用各类场合的Makefile模板

1.写在前面对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。Linux开发与Windows不同,Linux下一般用的的gcc/g编译器&#xff…

毕业十年|我的嵌入式AI学习路线(笔记、代码)

嵌入式从业者接下来会有怎样的黄金十年?在物联网和人工智能的促进下,嵌入式在未来的5-10年内会迎来更多的发展机会,一方面嵌入式开发会迎来更多的应用场景,另一方面嵌入式开发的技术体系也会逐渐丰富,从而拓展物联网开…

在艰苦年代,买不起万用表,怎么测量电路电压?

如何测量电压?有这样一张图片:用舌头来测量?开玩笑的吧!不过这张照片勾起了我的回忆:有一位玩电子的老前辈,现在已经70多岁了。和他聊天,他说,当年他们玩电子,条件非常艰…

VBA学习_5:流程控制

1、If If Range("B2").Value >60 Then Range("C2").Value "及格" Else Range("C2").Value"不及格"如果。。。那么。。。。否则。。。。 If Range("B2").Value > 60 ThenRange("C2").Value "…

嵌入式的薪资还是挺低的

我最近和一个比较好的朋友聊天,我这个朋友在一家比较传统的公司,在这个公司做嵌入式软件开发,偏系统方向的。然后最近拿到了几个不错的offer,让我帮忙看看。这几个offer我就不发出来给大家看了。可以肯定的是,这几个of…

新手必看!单片机掉电检测与数据掉电保存方案

单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据。在某些应用场合如测量、控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据。因此&am…

Study Notes ASP.Net 之Theme Skin

基本概念&#xff1a; Theme 和 Skin用以定义页面中各个控件的显示样式&#xff0c;如字体大小&#xff0c;前/后景色等等。一个Theme可以包括多个Skin&#xff0c;一个Skin可以定义多个控件的样式。目的&#xff1a; 使得页面样式的制作可以与页面制作分工进行。<?xml:nam…

推荐一个值得加入C++开发者俱乐部

之前我有篇文章提起过&#xff0c;开始进入某厂是从0开始做项目的&#xff0c;当时看到那套SDK软件&#xff0c;而且97%都是用C写的&#xff0c;我的头都大了。后面也是坚持不断的学习&#xff0c;积累&#xff0c;修改&#xff0c;向身边同事请教&#xff0c;加入优秀社群学习…

DataGrid 完全攻略之四 (实现统计)

前台代码&#xff1a;html<% Page language"c#" Codebehind"UserCount.aspx.cs" AutoEventWireup"false" Inherits"MsDataGrid.UserCount" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >…

Window系统下安装Redis

下载Redis Redis官网只提供Linux版本&#xff0c;Windows版本只能去GitHub上下载 Redis官网下载地址&#xff1a;http://redis.io/download GitHub下载地址&#xff1a;https://github.com/MSOpenTech/redis/tags 安装Redis 创建redis文件夹&#xff0c;解压到此目录下&#xf…

iTunes“解决方案”发展历程及研究(上)

以下内容来自于我的《iTunes内容解决方案研究》的PPT&#xff0c;懒得往上敲字了&#xff0c;直接以图片的形式发布&#xff0c;有需要的&#xff0c;我可以提供pdf版本给你&#xff0c;版权所有

Linux下的memcpy函数

之前写过一篇关于 memcpy函数面试的文章几个简单的笔试题里面的代码使用的是char指针来实现&#xff0c;今天我们来看看Linux下面的memcpy函数&#xff0c;它的实现上还是有一些巧妙的。void * memcpy(void * dest, const void *src, size_t n) {if (!(((unsigned long) dest ^…

linux命令行抓取网页快照-(xvfb+CutyCapt)

linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;又一个 WordPress 博客Browse: Home / 2009 / 十一月 / linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;By saymoon on 2009年11月…

php过waf木马,一款过waf的一句话木马分析 | CN-SEC 中文网

摘要中午&#xff0c;下班回来&#xff0c;就看一个朋友给我发了几个马儿 让我看看解解密码 很简单中午&#xff0c;下班回来&#xff0c;就看一个朋友给我发了几个马儿 让我看看解解密码 很简单猛不猛我不知道 那时候手机 太长的看着就烦 就回到家瞅瞅了首先我们看这…

你没干什么坏事,你怕什么?

如图我很久就知道深信服这家企业&#xff0c;记得是几年前&#xff0c;我有一个同学跟我说&#xff0c;有一个比较厉害的朋友在这个企业上班&#xff0c;拿到了非常不错的薪水&#xff0c;我如果想去这个公司看看&#xff0c;可以让这位朋友帮忙搭线。后面查这个企业&#xff0…

python用循环打出阶梯图形,matplotlib阶梯图的实现(step())

step函数概述step函数用于绘制阶梯图。根据源码可知&#xff0c;step函数是对plot函数的轻量级封装&#xff0c;很多概念和用法与plot函数非常相似。def step(self, x, y, *args, wherepre, dataNone, **kwargs):cbook._check_in_list((pre, post, mid), wherewhere)kwargs[dra…

嵌入式还有哪些风口值得入?

大家好&#xff0c;我是写代码的篮球球痴前两天发了篇文章说到嵌入式薪资的&#xff0c;很多人想知道目前有哪些不错的行业可以加入&#xff0c;这篇文章罗列了很多风口行业。我相信&#xff0c;半导体芯片会是很重要的方向&#xff0c;但是不管路修得多好&#xff0c;都需要汽…