快速业务通道

BlogEngine.Net架构与源代码分析系列part9:开发扩展(上)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-03
;(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)
2 {
3 ArrayList codeAssemblies = Utils.CodeAssemblies();
4 foreach (Assembly a in codeAssemblies)
5 {
6 Type[] types = a.GetTypes();
7 foreach (Type type in types)
8 {
9 object[] attributes = type.GetCustomAttributes(typeof(ExtensionAttribute), false);
10 foreach (object attribute in attributes)
11 {
12 if (ExtensionManager.ExtensionEnabled(type.Name))
13 {
14 a.CreateInstance(type.FullName);
15 }
16 }
17 }
18 }
19 }

这里请大家注意一下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中,这一部分是调用第一部分来实现管理的,第一部分中有很多信息也是为它服务的:

BlogEngine.Net架构与源代码分析系列part9:开发扩展(上)

Default.aspx:一个承载页面,路由导航。

Extensions.ascx:一个Extenison的管理列表。

Editor.ascx:是Extension源代码浏览器。

Settings.ascx:是Extension设置器。注意它实际上是一个统一的配置界面。

对于ExtensionManager的实现逻辑是很复杂的,希望这个整体的介绍能给您阅读代码时带来帮助,如果有不清楚的问题可以给我回复一起讨论。这一部分我们需要注意一下配置从DataStore的加载和修改是如何完成的,对于逻辑中的配置和参数部分是如何统一化的。

总结

我觉得Extension这种扩展非常的优秀,当然这种扩展要想发挥出来肯定对于业务核

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号