2010-09-29 29 views
4

民間,連接字符串在哪裏應該存儲在一個n層asp.net應用程序

我有一個ASP.NET項目是相當n層,由命名空間,但我需要分成三個項目:數據層,中間層和前端。

因爲......

A)這似乎是做正確的事,並

B)我有各種各樣的運行單元測試ASP.NET問題,我這樣做託管組件。

無論如何,我的問題是,你在哪裏保存你的配置信息?

現在,例如,我的中間層類(使用Linq to SQL)在實例化新數據上下文時自動從web.config中提取它們的連接字符串信息。

如果我的數據層在另一個項目中,是否可以使用web.config配置信息?

如果是這樣,單元測試(通常在單獨的程序集中)將如何提供soch配置信息?

謝謝您的時間!

回答

1

我們將它們保存在一個全局的「設置」文件中,該文件碰巧是XML。該文件包含所有GLOBAL設置,其中一個是連接字符串,指向相應的服務器以及用戶名和密碼。然後,當我的應用程序使用它時,他們將它們需要的特定目錄(數據庫)放入連接字符串中。

我們有針對每個操作環境(prod,dev,staging等)的文件版本。然後,通過兩個設置 - 文件路徑(帶有代表環境的令牌)和環境 - 我可以選擇正確的設置文件。

這也具有30秒故障轉移的好處。簡單地更改設置文件中的服務器名稱,然後重新啓動應用程序(網絡),並且已經故障切換(當然,如果需要,您必須恢復數據)。

然後當應用程序啓動時,我們將正確的連接字符串寫入web.config文件(如果它不同)。有了這個,我們可以通過更改一個appSettings值將網站從DEV更改爲PROD。

0

出於測試目的,不要使用默認ctor實例化DataContext。將連接字符串信息傳遞給構造函數。

我更喜歡使用IoC框架將連接注入數據上下文,然後將上下文注入其他類。

2

只要沒有太多,可以很方便地在web.config中。當然,你的DAL應該完全不知道它來自哪裏。

一個好的選擇是當你的數據層被調用來做某事時給它的配置信息,並且在網絡調用進來時它將被調用來執行某些操作。你的web.config。在我當前的項目中,我的數據層中有一個連接字符串的靜態字典,我在我的全局程序中調用了這樣的例程。ASAX:

CAPPData.ConnectionStrings(DatabaseName.Foo) = 
    ConfigurationManager.ConnectionStrings("FooConnStr").ConnectionString() 
CAPPData.ConnectionStrings(DatabaseName.Bar) = 
    ConfigurationManager.ConnectionStrings("BarConnStr").ConnectionString() 
etc. 

「注入」像這樣可以有利於自動化測試的目的,這取決於如何/如果你測試你的DAL。對我來說,這僅僅是因爲我不想製作一個單獨的配置文件。

相關問題