ASP.NET插件的实现方式

开发 后端
本文介绍一直以来我都在寻求基于ASP.NET插件的实现方式,有试过动态加载用户控件实现,感觉有些沉重,苦思很久,偶然之间想到了第一篇笔记。

还记得我在博客园***篇博客就是学习委托和事件的学习笔记,呵呵,转眼已经在博客园待了一年多了,学到的东西确实是很多,感谢博客园里面辛勤写博的各位,给我们带来了宝贵的学习资料,传递着分享知识和技术的快乐。

入正题,一直以来我都在寻求基于ASP.NET插件的实现方式,有试过动态加载用户控件实现,感觉有些沉重,苦思很久,偶然之间想到了***篇笔记,原来苦苦得寻求,却在灯火阑珊处,呵呵。其实插件主要是提供可拓展点,其实现实中的需求的插件所要实现的好像也只是拓展操作之前或者操作之后,有点像AOP,那如果程序能提供这些拓展点,ASP.NET插件功能就可以基本实现了!代码实现思路如下

  1. namespaceMyPlug  
  2. {  
  3. publicclassArticleReadingArg:EventArgs  
  4. {  
  5. publicArticleTheArticle{get;set;}  
  6. }  
  7. publicclassArticlePage:System.Web.UI.Page  
  8. {  
  9. publicstaticeventEventHandler<ArticleReadingArg>OnReading;  
  10. protectedoverridevoidOnInit(EventArgse)  
  11. {  
  12. if(OnReading!=null)  
  13. {  
  14. OnReading(EventArgs.Empty,newArticleReadingArg(GetArticle(WebRequest.GetValue("ID"))));  
  15. }  
  16. base.OnInit(e);  
  17. }  

首先是提供一个拓展点,假设我们要实现新闻管理系统的新闻访问统计插件,那我们要先提供一个可拓展点代码如下这是一个页面的基类,他曝露出了一个静态的事件OnReading提供拓展者订阅页面浏览前的事件,当然,其实Page类也有很多事件可以订阅,不过并没有公开给其他类订阅或调用。好了,弄好这一步,基本条件已经成熟啦,因为外部类可以订阅到Onreading这个事件,并且可以时间的参数是可以访问到相对应的新闻实体,控制权就转移到订阅者手中了。

  1. publicclassCounterPlug  
  2. {  
  3. staticCounterPlug()  
  4. {  
  5. if(this.Enable)ArticlePage.OnReading+=AddCount;  
  6. }  
  7. publicstaticvoidAddCount(objectsender,ArticleReadingArge)  
  8. {  
  9. e.TheArticle.Hit+=1;  
  10. }  

如果你用的ASP.NET模型是WebSite模型,那么很方便,利用本身带来的动态编译,可以很方便得实现后续的使用和管理,如果不是,可以编译成独立的dll,再利用反射创建实例,这里利用了.net静态初始化函数的特点-只在该类型的某个静态成员***次被访问或该类型***次实例化时执行,具体请查看msdn。我们这里用创建实例的形式激活这个静态函数,以达到事件的订阅。我们注意到插件加载是有条件的,这个条件可以根据配置文件,也可以根据数据库数据获取。下面是激活的简单代码,也就是你点击启用之后执行的

  1. Activator.CreateInstance<MyPlug.CounterPlug>(); 

因为创建了一个实例,所以静态函数执行了,事件也被订阅了!所以ASP.NET插件的功能就会执行!


静态变量的生命周期是随着应用程序的结束而结束的,所以应该不会冒冒然就消失了的。好啦,到这里就实现了插件的启用了,插件的卸载也挺取巧的,本来想到应用程序域这个概念,想想还是不妥,这玩意要一定的信任级别,***想到webConfig每次修改都会重启应用程序,嘻嘻,这个本来很讨厌的特性,在这里还有得用,关闭插件时修改配置记录问Disenable之外,修改下WebConfig的***修改时间

  1. stringconfigFile=HttpContext.Current.Server.MapPath("~/Web.config");  
  2. System.IO.File.SetLastAccessTimeUtc(configFile,DateTime.UtcNow); 

【编辑推荐】

  1. 浅谈ASP.NET MVC框架
  2. 介绍ASP.NET MVC中的MvcAjaxPanel
  3. ASP.NET MVC框架拯救UpdatePanel
  4. 用ASP.NET MVC源代码寻找解决方案
  5. ASP.NET MVC框架的ActionInvoker
责任编辑:佚名 来源: IT168
相关推荐

2011-07-04 15:41:14

AjaxASP.NET

2009-03-13 09:48:33

ASP.NETAjaxJQuery

2011-07-12 13:53:25

ASP.NETAjax

2009-08-12 18:19:46

ASP.NET报表打印

2012-05-07 13:23:47

ASP.NET

2009-07-20 15:44:32

ASP.NET MVC

2011-05-23 10:37:03

2009-07-30 12:19:32

ASP.NET中使用A

2009-07-22 17:45:35

ASP.NET教程

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-08-05 14:27:55

ASP.NET模板基本

2009-07-28 14:47:18

ASP.NET MVC

2009-07-28 09:45:34

Webpart部署方式使用ASP.NET

2009-08-04 10:02:36

中国站长站

2009-07-29 11:18:21

ASP.NET连接My

2011-04-12 13:53:25

ASP.NET MVCjQuery

2009-07-22 17:13:21

Asp.Net编程

2009-07-23 10:31:14

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程
点赞
收藏

51CTO技术栈公众号