使用 PreApplicationStartMethod 註冊自定義的 VirtualPathProvider

在 ASP.NET 網站中,有一些工作必須在網站初始化階段完成,比如自定義的虛擬路徑提供器,通常情況下,我們需要在 Global.asax 中進行註冊,或者使用 App_Code 目錄中任意類的AppInitialize 靜態方法。在 CoderZh 的 VirtualPathProvider註冊的問題 中討論了這兩種方法。

 

在 ASP.NET 4.0 中提供了一個新的特徵 PreApplicationStartMethod 允許我們在上邊初始化之前完成網站的初始化,這樣,我們可以在一個類庫項目中使用這個特徵來標記需要在網站中提前初始化的方法。但是對於多個程序集的情況下,不能保證調用程序集定義的應用程序啓動方法的順序。因此,每個註冊的開始方法應該將代碼編寫爲分開運行,不應該依賴於其他註冊開始方法的副作用。

詳細說明見 MSDN 的 PreApplicationStartMethodAttribute 類

 

下面的代碼演示瞭如何註冊自定義的 VirtualPathProvider,網站項目中僅僅引用這個項目即可,不需要進行額外的配置了。

WebActivator提供PreApplicationStartMethod、PostApplicationStartMethod、ApplicationShutdownMethod三種觸發時機,依實測,存取HttpContext.Current.Application的程式要放在PostApplicationStartMethod才能正確執行。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 using System.Web;
 
 [assembly: PreApplicationStartMethod(typeof(MyNamespace.Class1), "Init")]
 
 namespace MyNamespace
 {
 
     public class DemoVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
     {
     }
 
     public class Class1
     {
         public static void Init()
         {
             DemoVirtualPathProvider provider = new DemoVirtualPathProvider();
             System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(provider);
         }
     }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章