.net文档生成工具2.0 支持自定义文档生成器【转:http://www.cnblogs.com/lucc/archive/2008/09/05/1284762.html】...
相关下载:
相关连接:
.net文档生成工具2.0已经完成,在2.0版本中,您将可以创建自定义的文档生成器,生成个性化的文档。本文将介绍如何编写文档生成器。
.net文档生成工具(ADB)使用抽象工厂模式编写,你只需要继承DocumentBuilder并重写Build方法和Filter属性就可以创建自定义的文档生成器。
1. ADB结构图:
2. 主界面和文档生成器的交互:
文档生成器通过主界面提供的IGetData接口获取程序集的成员(类型,方法,属性等),通过IInteract接口同用户交互(如显示进度等)。
3. 如何编写文档生成器:
下面通过编写一个名为TestBuilder的文档生成器说明如何编写文档生成器,TestBuilder只是简单的将选中的成员的名称及其摘要写入一个文本文件中。
(1) 新建一个.net类库工程(名称为TestBuilder),拷贝ADB目录下的ADB.EXE,ADB.Factories.dll文件和en文件夹到TestBuilder输出目录;
(2) 引用ADB.Factories.dll;
(3) 创建文档生成器配置文件,创建一个名为TestBuilder.builder文件(保存为UTF-8格式),放置在TestBuilder.dll所在的目录下,TestBuilder.builder内容如下
<?xml version="1.0" encoding="utf-8"?>
<Builders>
<CustomBuilder Name="示例文档生成器" Entry="ADB.TestBuilder"/>
</Builders>
(4) 调试配置:
打开TestBuilder的属性页,设置调试启动项:
(5) 添加一个名为TestBuilder的类,继承DocumentBuilder,重写Builder方法和Filter属性代码如下:
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5using System.Reflection;
6using System.Xml;
7using System.Diagnostics;
8
9namespace ADB
10{
11 using Factories;
12
13 public class TestBuilder : DocumentBuilder
14 {
15 public TestBuilder(IGetData data, IInteract interact)
16 : base(data, interact)
17 {
18 }
19
20 private string GetSummary(MemberInfo info)
21 {
22 MemberXmlElement xmldata = DataProvider.GetMemberXmlNode(info);
23 if (xmldata != null)
24 {
25 XmlNodeList xnl = xmldata.Data.GetElementsByTagName("summary");
26 if (xnl.Count > 0)
27 {
28 return xnl[0].InnerText;
29 }
30 else
31 return string.Empty;
32 }
33 else
34 return string.Empty;
35 }
36
37 public override void Build(string title, string target)
38 {
39 StreamWriter sw = new StreamWriter(target, false, Encoding.GetEncoding("GBK"));
40 try
41 {
42 sw.Write("-----------------------------------------------------\r\n");
43
44 //使用DataProvider.GetTypes()获取所有的类型(类,接口,委托,结构,枚举)
45 foreach (DocumentBuilderMember typeMember in DataProvider.GetTypes())
46 {
47 if (typeMember.Selected)//Selected属性指明该类型是否选中
48 {
49 sw.Write((typeMember.MemberInfo as Type).FullName);
50 sw.Write(":");
51 sw.Write(GetSummary(typeMember.MemberInfo));//获取类型的摘要
52 sw.Write("\r\n");
53
54 //使用DataProvider.GetTypeMember获取类型的所有成员
55 DocumentBuilderMember[] typeMembers = DataProvider.GetTypeMembers(typeMember.MemberInfo as Type);
56 foreach (DocumentBuilderMember member in typeMembers)
57 {
58 if (member.Selected)//Selected属性指明该成员是否选中
59 {
60 sw.Write(" ");
61 sw.Write(member.MemberInfo.Name);
62 sw.Write(":");
63 sw.Write(GetSummary(member.MemberInfo));//获取成员的摘要
64 sw.Write("\r\n");
65 }
66 }
67 sw.Write("-----------------------------------------------------\r\n");
68 }
69 }
70 Process.Start(target);
71 }
72 catch (Exception)
73 {
74 throw;
75 }
76 finally
77 {
78 sw.Close();
79 }
80 }
81
82 public override string Filter
83 {
84 get { return "文本文件|*.txt"; }
85 }
86 }
87}
生成工程,文档生成器TestBuilder就完成了。
4. 让ADB自动加载自定义的文档生成器
您只需将编写好的包含有自定义的文档生成器的程序集及其配置文件放到ADB.EXE所在的目录中即可,程序集和配置文件名称必须相同,配置文件的扩展名为.builder,如果引用了其他程序集,也要一并拷贝。
5.文档生成器配置文件格式说明:
1<?xml version="1.0" encoding="utf-8"?>
2<Builders>
3 <CustomBuilder Name="生成器1的名称" Entry="生成器1的类名"/>
4 <CustomBuilder Name="生成器2的名称" Entry="生成器2的类名"/>
5</Builders>
6
1.CustomBuilder必须有Name和Entry两个属性(区分大小写),同一程序集内可以有多个文档生成器;
2.Entry必须使用类的完全限定名(命名空间.类名);
3.<?xml version="1.0" encoding="utf-8"?>指定的编码必须和文件保存的编码一致。
转载于:https://www.cnblogs.com/JemBai/archive/2008/09/06/1285754.html