2014-01-22 61 views
2

我正在創建一個庫,需要在ASP.NET請求生命週期的各個階段運行一些代碼。我如何註冊處理程序的Init()外的HttpApplication事件()

通過重寫HttpApplication.Init()並在其中註冊各種處理程序來編寫Web應用程序時很容易。但是,我想在Application_Start()期間從我的庫中執行此操作。我不希望消費者必須重寫Init()並從那裏調用我的事件設置代碼。

有什麼辦法可以達到這個目的嗎?

這是我的理想設置:

// in the consumer's code 
protected void Application_Start() 
{ 
    // should ideally be able to register lifecycle event handlers from the line below 
    MyLibrary.Configure(...); 
} 
+0

IMO當你的圖書館開始(我_sup pose_它是一個控制庫)... HttpApplication.Init()已經過了很長時間...然後他們必須這樣做 –

+0

您的庫可以不公開用戶可以添加到的各種模塊(實現了'IHttpModule')嗎?組態?這是圖書館進入管道的常用方式,每個模塊都是Init'ed –

+0

@Damien_The_Unbeliever:你能用一個例子來回答嗎?特別是,我的庫如何配置這些模塊(這種掛鉤到生命週期中只是庫的一個功能,只是將整個庫作爲模塊是不夠的)。 – ChaseMedallion

回答

0

你應該只能夠做

Global.asax的

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     MyLib.Configure(this); 
    } 
} 

這這裏,指的是應用程序,並有大量的事件你可以訂閱它,包括請求生命週期事件

+0

當多個HttpApplication實例被使用時,這不會遇到問題(請參閱http:///stackoverflow.com/questions/6697409/how-many-instances-of-an-application-object-can-run-per-application)? – ChaseMedallion

+0

即使您在同一個應用程序池中運行同一應用程序的多個實例,您也應該可以,它們將在獨立應用程序域下運行。 – iamkrillin

+0

這似乎不同意我發佈的SO問題的答案。它說HttpApplication實例在可能的情況下被重用,但是需要多個來同時處理多個請求 – ChaseMedallion

相關問題