偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ASP.NET插件的實(shí)現(xiàn)方式

開(kāi)發(fā) 后端
本文介紹一直以來(lái)我都在尋求基于ASP.NET插件的實(shí)現(xiàn)方式,有試過(guò)動(dòng)態(tài)加載用戶(hù)控件實(shí)現(xiàn),感覺(jué)有些沉重,苦思很久,偶然之間想到了第一篇筆記。

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

入正題,一直以來(lái)我都在尋求基于ASP.NET插件的實(shí)現(xiàn)方式,有試過(guò)動(dòng)態(tài)加載用戶(hù)控件實(shí)現(xiàn),感覺(jué)有些沉重,苦思很久,偶然之間想到了***篇筆記,原來(lái)苦苦得尋求,卻在燈火闌珊處,呵呵。其實(shí)插件主要是提供可拓展點(diǎn),其實(shí)現(xiàn)實(shí)中的需求的插件所要實(shí)現(xiàn)的好像也只是拓展操作之前或者操作之后,有點(diǎn)像AOP,那如果程序能提供這些拓展點(diǎn),ASP.NET插件功能就可以基本實(shí)現(xiàn)了!代碼實(shí)現(xiàn)思路如下

  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. }  

首先是提供一個(gè)拓展點(diǎn),假設(shè)我們要實(shí)現(xiàn)新聞管理系統(tǒng)的新聞訪問(wèn)統(tǒng)計(jì)插件,那我們要先提供一個(gè)可拓展點(diǎn)代碼如下這是一個(gè)頁(yè)面的基類(lèi),他曝露出了一個(gè)靜態(tài)的事件OnReading提供拓展者訂閱頁(yè)面瀏覽前的事件,當(dāng)然,其實(shí)Page類(lèi)也有很多事件可以訂閱,不過(guò)并沒(méi)有公開(kāi)給其他類(lèi)訂閱或調(diào)用。好了,弄好這一步,基本條件已經(jīng)成熟啦,因?yàn)橥獠款?lèi)可以訂閱到Onreading這個(gè)事件,并且可以時(shí)間的參數(shù)是可以訪問(wèn)到相對(duì)應(yīng)的新聞實(shí)體,控制權(quán)就轉(zhuǎn)移到訂閱者手中了。

  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模型,那么很方便,利用本身帶來(lái)的動(dòng)態(tài)編譯,可以很方便得實(shí)現(xiàn)后續(xù)的使用和管理,如果不是,可以編譯成獨(dú)立的dll,再利用反射創(chuàng)建實(shí)例,這里利用了.net靜態(tài)初始化函數(shù)的特點(diǎn)-只在該類(lèi)型的某個(gè)靜態(tài)成員***次被訪問(wèn)或該類(lèi)型***次實(shí)例化時(shí)執(zhí)行,具體請(qǐng)查看msdn。我們這里用創(chuàng)建實(shí)例的形式激活這個(gè)靜態(tài)函數(shù),以達(dá)到事件的訂閱。我們注意到插件加載是有條件的,這個(gè)條件可以根據(jù)配置文件,也可以根據(jù)數(shù)據(jù)庫(kù)數(shù)據(jù)獲取。下面是激活的簡(jiǎn)單代碼,也就是你點(diǎn)擊啟用之后執(zhí)行的

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

因?yàn)閯?chuàng)建了一個(gè)實(shí)例,所以靜態(tài)函數(shù)執(zhí)行了,事件也被訂閱了!所以ASP.NET插件的功能就會(huì)執(zhí)行!


靜態(tài)變量的生命周期是隨著應(yīng)用程序的結(jié)束而結(jié)束的,所以應(yīng)該不會(huì)冒冒然就消失了的。好啦,到這里就實(shí)現(xiàn)了插件的啟用了,插件的卸載也挺取巧的,本來(lái)想到應(yīng)用程序域這個(gè)概念,想想還是不妥,這玩意要一定的信任級(jí)別,***想到webConfig每次修改都會(huì)重啟應(yīng)用程序,嘻嘻,這個(gè)本來(lái)很討厭的特性,在這里還有得用,關(guān)閉插件時(shí)修改配置記錄問(wèn)Disenable之外,修改下WebConfig的***修改時(shí)間

  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
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

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報(bào)表打印

2012-05-07 13:23:47

ASP.NET

2009-07-20 15:44:32

ASP.NET MVC

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-30 12:19:32

ASP.NET中使用A

2011-05-23 10:37:03

2009-07-28 09:45:34

Webpart部署方式使用ASP.NET

2009-08-05 14:27:55

ASP.NET模板基本

2009-07-28 14:47:18

ASP.NET MVC

2009-08-04 10:02:36

中國(guó)站長(zhǎng)站

2009-07-29 11:18:21

ASP.NET連接My

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門(mén)教程

2011-04-12 13:53:25

ASP.NET MVCjQuery

2009-07-27 15:48:43

2009-07-29 11:19:03

JavaScriptASP.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)