MSDN裡有描述,VirtualPathProvider只允許在兩個地方注冊:
1. App_Code目錄中任意類的AppInitialize靜態方法。
2. Global.asax中的Application_Start方法中。
而我想知道是,有沒有什麼辦法,可以將VirtualPathProvider注冊的代碼放入外部的dll中,在不需 要在App_Code和Global.asax中添加任何代碼的情況下,將VirtualPathProvider通過外部dll自動注冊。 或者,只通過web.config配置也行。
(VirtualPathProvider的作用參考: http://www.cnblogs.com/coderzh/archive/2010/01/26/Sharing-Master-Pages-By-DLL.html )
App_Code AppInitialize
在App_Code目錄裡,任意類,實現一個AppInitialize靜態方法,原型:
public static void AppInitialize()
這個方法,將會在Web應用程序初始時自動被調用。因此,考慮在外部dll中定義的AppInitialize方法 是否會被執行?
遺憾的是,AppInitialize方法必須在App_Code目錄不可。App_Code目錄是一個非常特殊的目錄,特殊 到很多規則你都不知道,ASP.NET對這個目錄的文件會做一些特殊的處理。就比如AppInitialize靜態方法 的執行規則:
1. AppInitialize靜態方法必須是在App_Code目錄下。
2. AppInitialize靜態方法在App_Code目錄下不允許被定義兩次。
如果AppInitialize在App_Code的兩個類中都有定義,比如:
public class SomeClassOne
{
public static void AppInitialize()
{
HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
}
}
public class SomeClassTwo
{
public static void AppInitialize()
{
HostingEnvironment.Cache["InitializationTimeTwo"] = DateTime.Now;
}
}