2012-11-27 47 views
0

我一直在想如何在分層應用程序中使用HttpRequestDbContext的一個實例。我想出的解決方案之一是創建一個HttpModule,它將在BeginRequest事件處理程序中的HttpContext.Current.Items中初始化上下文的一個實例,然後將其置於EndRequest事件處理程序中。每個HTTP請求的DbContext,但避免依賴於數據層中的HttpContext

雖然上面的方法提出了一個問題,但我需要在我的數據層和業務層中引用System.Web,以獲取存儲的DbContext實例。這可能是好的,但我寧願避免走這條路。如果我想引用和使用來自非Web應用程序的數據層和業務層,該怎麼辦?

任何想法?

回答

1

您可以使用依賴注入。只需創建接口IContextHolder以獲取上下文並從Web應用程序將實例注入到較低層。對於不同類型的應用程序,此接口的實現將會有所不同 - 它將爲您的上下文實例包裝對實際存儲器的訪問。

0

最簡單的解決方案之一是將訪問數據上下文包裝在門面/網關類的靜態屬性中。

這樣,在Web應用程序中,該屬性可以訪問HttpContext.Current.Items並在其中存儲上下文。另一方面,如果缺少http上下文,則可以爲非Web應用程序實施任何其他生存期管理策略。

public static TheDbContext Current { 
    get { 
    if (HttpContext.Current != null) { 
     // lifetime management for a web app 
     // e.g. with the Items container 
    } 
    else { 
     // lifetime management for a non-web app 
    } 
    } 
} 

本身並不一定是數據層的一部分門面,你不要再在數據層參考System.Web

相關問題