2010-03-04 38 views
1

我的ASP.NET Web應用程序利用由SQL Server數據存儲支持的自定義資源提供程序。據我所知,隱式資源在編譯時調用資源提供程序來確定是否需要爲給定的資源鍵生成資源表達式。因此,我的構建過程現在依賴於擁有包含必要資源鍵的實時最新數據庫。ASP.NET資源:在編譯時與運行時調用ResourceProvider時檢測到

這本身並不一定是個問題。問題在於應用程序連接到querystring參數確定的許多數據庫中的一個(可怕的設計,但不幸的是我現在堅持使用它)。顯然在編譯時沒有查詢字符串,所以資源提供者無法訪問數據庫。是否有可能確定資源提供者(或更具體地說是資源提供者的下游代碼)是否在編譯過程中被調用過,因此我可以指向預定義的數據庫?

現在我只是默認特定的數據庫,如果HttpContext.Current == null。這工作正常,但是這個邏輯必須存在於數據訪問層中,我絕對討厭引用System.Web的數據訪問層。有更好的解決方案嗎?

+0

這將是很好,如果有人可以提供一個良好的答案。我也使用HttpContext,也與我的DAL混淆。 – 2011-02-17 15:31:08

回答

0
 object IResourceProvider.GetObject(string resourceKey, CultureInfo culture) 
     { 
      if (AspHelpers.ASPNetCompilerExecutionContext) 
       return "ASPNetCompilerDesignTimeExecutionContext"; 

其中

public static bool ASPNetCompilerExecutionContext 
{ 
    get 
    { 
     string entryMethod = (new StackTrace()).GetFrame((new StackTrace()).FrameCount - 1).GetMethod().Name; 
     if (entryMethod == "PrecompileApp") 
      return true; 
     else 
      return false; 
    } 
}