BlogEngine.Net架构与源代码分析系列part9:开发扩展(上)
;(Post_Serving); 23 } 24 25 /**//// <summary> 26 /// Handles the Post.Serving event to take care of logging IP. 27 /// </summary> 28 private static void Post_Serving(object sender, ServingEventArgs e) 29 { 30 Post post = sender as Post; 31 if (post != null) 32 { 33 // 写入文章标题作为文件名称 34 // 获得IP地址并附加到这个文件 35 } 36 } 37} Extension如何被Host起来的 BlogEngine.Net使用反射技术来启动这些Extension。这些Extension在整个应用程序启动时随之启动,应用程序通过查找已编译的程序集动态加载这些Extension类到内存中来,也就执行了类构造器,实际上这些Extension也就运行起来。我们在Global.asax中可以看到如下代码: 1 void Application_Start(object sender, EventArgs e) 这里请大家注意一下Utils.CodeAssemblies()的实现使用了反射动态加载已编译的程序集(查找程序集的方法)。对于ExtensionManager.ExtensionEnabled是在管理中判断这个Extension是否启用,ExtensionManager下文会提到。 Extension的管理 这里所说的Extension目前可能还不是很完善。不过它的实现是BlogEngine.Net非常经典的一部分,很值得去仔细学习和研究,其中很多地方应用到了反射,XML序列化等。它提供给管理员对这些Extension一个统一的管理,包括控制源代码的浏览,应用和取消Extension,对其进行设置(DataStore)等。由于这部分的源代码比较多,不适合对其进行更细致的分析,我在这里只是简单介绍一下它的整体设计。 ExtensionManager分成了两部分: 1.逻辑处理,位于App_Code/ExtensionManager中,有四个.cs文件: ExtensionManager:完成了Extension管理部分常用的方法,也对页面提供一些直接性的服务。 ManagedExtension:是每个可被管理的Extension类的封装。 ExtensionSettings:也是为了管理Extension而封装的设置类,注意它与BlogEngine.Core.DataStore中的同名类的区别。 ExtensionParameter:主要是为ExtensionSettings服务的参数处理的封装。 这些是ExtensionManager主要逻辑,完成包括Extenison配置的加载和存储调用,缓存处理,统一化的管理模型,为页面提供一些直接的服务等。 1.页面管理,位于admin/Extension Manager中,这一部分是调用第一部分来实现管理的,第一部分中有很多信息也是为它服务的: Default.aspx:一个承载页面,路由导航。 Extensions.ascx:一个Extenison的管理列表。 Editor.ascx:是Extension源代码浏览器。 Settings.ascx:是Extension设置器。注意它实际上是一个统一的配置界面。 对于ExtensionManager的实现逻辑是很复杂的,希望这个整体的介绍能给您阅读代码时带来帮助,如果有不清楚的问题可以给我回复一起讨论。这一部分我们需要注意一下配置从DataStore的加载和修改是如何完成的,对于逻辑中的配置和参数部分是如何统一化的。 总结 我觉得Extension这种扩展非常的优秀,当然这种扩展要想发挥出来肯定对于业务核 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |