2012-09-06 32 views
6

我的業務層創建文件,並需要將它們保存在我的asp.net mvc 4 Web前端的App_Data文件夾中。在業務層中使用Server.MapPath

我可以在業務層使用Server.MapPath來獲取App_Data文件夾的物理路徑。但我想避免在業務層中引用System.Web

是否有其他方法可以在業務層獲得App_Data的路徑?

回答

26

解決此問題的正確方法是讓表示層將路徑傳遞到業務層。

換句話說,擁有業務層的目的是在用戶界面和業務流程之間創建一個關注點。如果您強制業務流程瞭解UI層,那麼您違反了這種關注的分離。

有很多方法可以解決這個問題。當構建業務層時,可以將路徑傳遞到業務層,例如通過構造函數初始化或依賴注入。或者你可以將它傳遞給方法調用。或者,您可以創建某種形式的配置文件,以加載包含路徑的業務層。

有很多方法可以做到這一點,不會違反關注點分離。

15

可以使用

string path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data"; 
+1

我喜歡這種方法,其實。它不會創建對ASP.NET的任何依賴,並且僅使用任何.NET應用程序通用的依賴關係。唯一的問題是,如果你不小心,它會在某種程度上將操作系統與操作系統聯繫起來。 –

5
string path = HostingEnvironment.MapPath("~\\App_Data"); 

它爲我

+0

HostingEnvironment是System.Web的一部分 – Spikolynn