还记得我在博客园***篇博客就是学习委托和事件的学习笔记,呵呵,转眼已经在博客园待了一年多了,学到的东西确实是很多,感谢博客园里面辛勤写博的各位,给我们带来了宝贵的学习资料,传递着分享知识和技术的快乐。
创新互联公司专注于郊区网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供郊区营销型网站建设,郊区网站制作、郊区网页设计、郊区网站官网定制、微信小程序开发服务,打造郊区网络公司原创品牌,更为您提供郊区网站排名全网营销落地服务。
入正题,一直以来我都在寻求基于ASP.NET插件的实现方式,有试过动态加载用户控件实现,感觉有些沉重,苦思很久,偶然之间想到了***篇笔记,原来苦苦得寻求,却在灯火阑珊处,呵呵。其实插件主要是提供可拓展点,其实现实中的需求的插件所要实现的好像也只是拓展操作之前或者操作之后,有点像AOP,那如果程序能提供这些拓展点,ASP.NET插件功能就可以基本实现了!代码实现思路如下
- namespaceMyPlug
- {
- publicclassArticleReadingArg:EventArgs
- {
- publicArticleTheArticle{get;set;}
- }
- publicclassArticlePage:System.Web.UI.Page
- {
- publicstaticeventEventHandler
OnReading; - protectedoverridevoidOnInit(EventArgse)
- {
- if(OnReading!=null)
- {
- OnReading(EventArgs.Empty,newArticleReadingArg(GetArticle(WebRequest.GetValue("ID"))));
- }
- base.OnInit(e);
- }
- }
首先是提供一个拓展点,假设我们要实现新闻管理系统的新闻访问统计插件,那我们要先提供一个可拓展点代码如下这是一个页面的基类,他曝露出了一个静态的事件OnReading提供拓展者订阅页面浏览前的事件,当然,其实Page类也有很多事件可以订阅,不过并没有公开给其他类订阅或调用。好了,弄好这一步,基本条件已经成熟啦,因为外部类可以订阅到Onreading这个事件,并且可以时间的参数是可以访问到相对应的新闻实体,控制权就转移到订阅者手中了。
- publicclassCounterPlug
- {
- staticCounterPlug()
- {
- if(this.Enable)ArticlePage.OnReading+=AddCount;
- }
- publicstaticvoidAddCount(objectsender,ArticleReadingArge)
- {
- e.TheArticle.Hit+=1;
- }
- }
如果你用的ASP.NET模型是WebSite模型,那么很方便,利用本身带来的动态编译,可以很方便得实现后续的使用和管理,如果不是,可以编译成独立的dll,再利用反射创建实例,这里利用了.net静态初始化函数的特点-只在该类型的某个静态成员***次被访问或该类型***次实例化时执行,具体请查看msdn。我们这里用创建实例的形式激活这个静态函数,以达到事件的订阅。我们注意到插件加载是有条件的,这个条件可以根据配置文件,也可以根据数据库数据获取。下面是激活的简单代码,也就是你点击启用之后执行的
- Activator.CreateInstance
();
因为创建了一个实例,所以静态函数执行了,事件也被订阅了!所以ASP.NET插件的功能就会执行!
静态变量的生命周期是随着应用程序的结束而结束的,所以应该不会冒冒然就消失了的。好啦,到这里就实现了插件的启用了,插件的卸载也挺取巧的,本来想到应用程序域这个概念,想想还是不妥,这玩意要一定的信任级别,***想到webConfig每次修改都会重启应用程序,嘻嘻,这个本来很讨厌的特性,在这里还有得用,关闭插件时修改配置记录问Disenable之外,修改下WebConfig的***修改时间
- stringconfigFile=HttpContext.Current.Server.MapPath("~/Web.config");
- System.IO.File.SetLastAccessTimeUtc(configFile,DateTime.UtcNow);
【编辑推荐】
本文题目:ASP.NET插件的实现方式
当前路径:http://www.csdahua.cn/qtweb/news18/262868.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网