Ndoc(利用反射生成api文档软件)算法总结
首先根据所选文档类型生成接口实例。
IDocumenter documenter =
(IDocumenter)project.Documenters[comboBoxDocumenters.SelectedIndex];
设置当前目录。
if (projectFilename != untitledProjectName)
{
Directory.SetCurrentDirectory(Path.GetDirectoryName(projectFilename));
}
从程序集中获取当前可生成文档类型。
foreach (string fileName in Directory.GetFiles(path, "NDoc.Documenter.*.dll"))
{
Assembly assembly = null;
try
{
assembly = Assembly.LoadFrom(fileName);
}
catch (BadImageFormatException)
{
Debug.WriteLine(String.Format("加载{0} 时发生BadImageFormatException 异常。", fileName));
}
}
获取可生成文档arraylist
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass && !type.IsAbstract && (type.GetInterface("NDoc.Core.IDocumenter") != null))
{
IDocumenter documenter = Activator.CreateInstance(type) as IDocumenter;
if (documenter != null)
{
documenter.Config.SetProject(this);
documenters.Add(documenter);
}
else
{
Trace.WriteLine(String.Format("文件{0} 中的文档引擎{0} 没有实现与当前版本IDocumenter 接口相一致的结构,因而无法被实例化。", type.FullName, fileName));
}
}
}
string message = documenter.CanBuild(project);
其中Idocumenter具有canbuild的方法,由basedocument重载判断加入的程序集和xml是否还存在。
生成了一个class:ProgressArgs
有两个属性:progress、status
public delegate void DocBuildingEventHandler(object sender, ProgressArgs e);
public event DocBuildingEventHandler DocBuildingStep;
事件和委托类似螺丝头,可以换上各种不同的螺丝头。
documenter.DocBuildingStep += new DocBuildingEventHandler(OnStepUpdate);
GetTypes 方法列出程序集中的所有类型。GetExportedTypes 方法列出对程序集以外的调用方可见的类型。GetType 方法可用于在程序集中搜索特定类型。CreateInstance 方法可用于在程序集中搜索和创建类型的实例。

浙公网安备 33010602011771号