国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Community Server專題五:IHttpHandlerFactory

2024-07-21 02:29:27
字體:
來源:轉載
供稿:網友

  如果你了解factory設計模式,這篇文章可以不用看,只要會配置ihttphandlerfactory就可以,不了解也沒有關系,通過下面的文章你可以學會如何使用ihttphandlerfactory,同時還會明白factory設計模式的廣義定義

  在前一篇專題中講解了httphandler在cs中的運用以及一些相關的話題。其實實現httphandler功能還有另外一個選擇就是handler factory(cs 中沒有用到handler factory),這是通過繼承ihttphandlerfactory接口來實現的。

  ihttphandlerfactory接口的定義如下:

interface ihttphandlerfactory
{
ihttphandler gethandler(httpcontext ctx, string requesttype, string url,string pathtranslated);
void releasehandler(ihttphandler handler);
}

  該接口中定義了2個方法,gethandler方法在請求開始的時候被調用,而releasehandler在請求結束,所有的handler都不再需要的時候被調用。

  如何使用呢?大致有三個步驟:

  1:定義實際處理httphandler的類(實現ihttphandler接口),這個類會在handlerfactory中被調用以進行業務處理,一個handlerfactory可以調用n個httphandler類(不然就不叫factory不是?。┻M行處理相關的業務邏輯。

  2:定義handlerfactory,例:

public class myhandlerfactory : ihttphandlerfactory
{
public ihttphandler gethandler(httpcontext ctx,string requesttype,string url,string pathtranslated)
{
//處理邏輯,最后返回一個httphandler類
}
public void releasehandler(ihttphandler handler) {}
}

  前一步說過,一個handlerfactory可以處理n個httphandler,什么時候該處理什么httphandler就在這里的處理邏輯中實現,例如:以上一篇專題防盜鏈中說到的,你可以定義兩個ihttphandler實現,分別處理對圖片與壓縮文件的請求。由于gethandler方法中傳入了httpcontext的上下文,因此可以對上下文中的url請求進行判斷,然后啟用不同的httphandler類。

  3:在web.config文件中注冊這個handlerfactory,注冊的方式與httphandler是一樣的。例:

<httphandlers>
<add verb="*" path="*.*"
type="mynamespace. myhandlerfactory, myassembly" />
</httphandlers>

  注意,這里不要再對httphandler進行配置了,無論你定義了多少ihttphandler實例,只要他們是通過httphandlerfactory調用實現其功能,在這里都不要去注冊它,不然就重復了。

  ihttphandlerfactory其實非常簡單,存在的思想就是factory設計模式(factory模式:利用給factory對象傳遞不同的參數,以返回具有相同基類或實現了同一接口的對象,這里指返回具有同一ihttphandler接口的對象)。

  什么時候你要使用ihttphandlerfactory而不去使用ihttphandler,我就個人的開發經驗做一下總結:

  1:在一個項目中需要使用很多ihttphandler的時候,而且對這些ihttphandler判斷都重復做一個同樣的前期處理,如果防盜鏈的例子中對圖片和壓縮兩個不同httphandler的處理,但是他們對url的判斷都是一致的,在.text中使用了ihttphandlerfactory,而不是ihttphandler,對于url的請求全都(*.asmx、error.aspx除外)轉交由一個ihttphandlerfactory入口統一處理。

  2:從部署和松散耦合考慮,如果你的web application足夠大(我目前還沒有設計過這種大型app),你就要考慮在更換httphandler處理類的時候該不該去改動web.config的配置,這種改動將會重新啟動整個app,對于一些系統而言這是不可以隨便進行的。這個時候,統一一個入口的ihttphandlerfactory很重要,這個入口相對不變,而ihttphandler實現可以通過外掛自定義的xml文件來實現松散耦合,運用一些反射什么的就可以實現了。

  如果對ihttphandlerfactory有其他見解的朋友請留下你的觀點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天水市| 多伦县| 梨树县| 科尔| 刚察县| 吴川市| 金坛市| 东方市| 江安县| 扬中市| 唐河县| 郸城县| 武鸣县| 黄平县| 资阳市| 兴宁市| 蒲江县| 监利县| 上高县| 涞水县| 蒲城县| 京山县| 岢岚县| 上思县| 桦甸市| 临湘市| 阳城县| 株洲县| 元谋县| 新余市| 灵宝市| 洪雅县| 泸西县| 上林县| 嵊州市| 翁牛特旗| 高台县| 麻城市| 桐梓县| 福清市| 喀什市|