新聞中心
還記得我在博客園***篇博客就是學習委托和事件的學習筆記,呵呵,轉(zhuǎn)眼已經(jīng)在博客園待了一年多了,學到的東西確實是很多,感謝博客園里面辛勤寫博的各位,給我們帶來了寶貴的學習資料,傳遞著分享知識和技術的快樂。

創(chuàng)新互聯(lián)公司專注于郊區(qū)網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供郊區(qū)營銷型網(wǎng)站建設,郊區(qū)網(wǎng)站制作、郊區(qū)網(wǎng)頁設計、郊區(qū)網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造郊區(qū)網(wǎng)絡公司原創(chuàng)品牌,更為您提供郊區(qū)網(wǎng)站排名全網(wǎng)營銷落地服務。
入正題,一直以來我都在尋求基于ASP.NET插件的實現(xiàn)方式,有試過動態(tài)加載用戶控件實現(xiàn),感覺有些沉重,苦思很久,偶然之間想到了***篇筆記,原來苦苦得尋求,卻在燈火闌珊處,呵呵。其實插件主要是提供可拓展點,其實現(xiàn)實中的需求的插件所要實現(xiàn)的好像也只是拓展操作之前或者操作之后,有點像AOP,那如果程序能提供這些拓展點,ASP.NET插件功能就可以基本實現(xiàn)了!代碼實現(xiàn)思路如下
- 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);
- }
- }
首先是提供一個拓展點,假設我們要實現(xiàn)新聞管理系統(tǒng)的新聞訪問統(tǒng)計插件,那我們要先提供一個可拓展點代碼如下這是一個頁面的基類,他曝露出了一個靜態(tài)的事件OnReading提供拓展者訂閱頁面瀏覽前的事件,當然,其實Page類也有很多事件可以訂閱,不過并沒有公開給其他類訂閱或調(diào)用。好了,弄好這一步,基本條件已經(jīng)成熟啦,因為外部類可以訂閱到Onreading這個事件,并且可以時間的參數(shù)是可以訪問到相對應的新聞實體,控制權就轉(zhuǎn)移到訂閱者手中了。
- publicclassCounterPlug
- {
- staticCounterPlug()
- {
- if(this.Enable)ArticlePage.OnReading+=AddCount;
- }
- publicstaticvoidAddCount(objectsender,ArticleReadingArge)
- {
- e.TheArticle.Hit+=1;
- }
- }
如果你用的ASP.NET模型是WebSite模型,那么很方便,利用本身帶來的動態(tài)編譯,可以很方便得實現(xiàn)后續(xù)的使用和管理,如果不是,可以編譯成獨立的dll,再利用反射創(chuàng)建實例,這里利用了.net靜態(tài)初始化函數(shù)的特點-只在該類型的某個靜態(tài)成員***次被訪問或該類型***次實例化時執(zhí)行,具體請查看msdn。我們這里用創(chuàng)建實例的形式激活這個靜態(tài)函數(shù),以達到事件的訂閱。我們注意到插件加載是有條件的,這個條件可以根據(jù)配置文件,也可以根據(jù)數(shù)據(jù)庫數(shù)據(jù)獲取。下面是激活的簡單代碼,也就是你點擊啟用之后執(zhí)行的
- Activator.CreateInstance
();
因為創(chuàng)建了一個實例,所以靜態(tài)函數(shù)執(zhí)行了,事件也被訂閱了!所以ASP.NET插件的功能就會執(zhí)行!
靜態(tài)變量的生命周期是隨著應用程序的結束而結束的,所以應該不會冒冒然就消失了的。好啦,到這里就實現(xiàn)了插件的啟用了,插件的卸載也挺取巧的,本來想到應用程序域這個概念,想想還是不妥,這玩意要一定的信任級別,***想到webConfig每次修改都會重啟應用程序,嘻嘻,這個本來很討厭的特性,在這里還有得用,關閉插件時修改配置記錄問Disenable之外,修改下WebConfig的***修改時間
- stringconfigFile=HttpContext.Current.Server.MapPath("~/Web.config");
- System.IO.File.SetLastAccessTimeUtc(configFile,DateTime.UtcNow);
【編輯推薦】
- 淺談ASP.NET MVC框架
- 介紹ASP.NET MVC中的MvcAjaxPanel
- ASP.NET MVC框架拯救UpdatePanel
- 用ASP.NET MVC源代碼尋找解決方案
- ASP.NET MVC框架的ActionInvoker
本文名稱:ASP.NET插件的實現(xiàn)方式
分享網(wǎng)址:http://www.dlmjj.cn/article/djipjdg.html


咨詢
建站咨詢
