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是否还存在。
 
生成了一个classProgressArgs
有两个属性:progressstatus
public delegate void DocBuildingEventHandler(object sender, ProgressArgs e);
 
public event DocBuildingEventHandler DocBuildingStep;
事件和委托类似螺丝头,可以换上各种不同的螺丝头。
 
 
documenter.DocBuildingStep += new DocBuildingEventHandler(OnStepUpdate);
 
GetTypes 方法列出程序集中的所有类型。GetExportedTypes 方法列出对程序集以外的调用方可见的类型。GetType 方法可用于在程序集中搜索特定类型。CreateInstance 方法可用于在程序集中搜索和创建类型的实例。
posted @ 2012-10-02 16:01  zxsr20  阅读(36)  评论(0)    收藏  举报