簡體   English   中英

在業務層中使用Server.MapPath

[英]Use Server.MapPath in Business Layer

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

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

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

處理此問題的正確方法是使表示層將路徑傳遞到業務層。

換句話說,擁有業務層的目的是在ui和業務流程之間創建關注點分離。 如果您強制業務流程了解ui層,那么您就違反了關注點。

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

有很多方法可以解決這個問題。

您可以使用

string  path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";
string path = HostingEnvironment.MapPath("~\\App_Data");

這個對我有用

我知道它是一個古老的問題但仍然是一個非常有效的問題。 我在這里看到了所有答案,我想在這里寫下最好的知識筆記。

  1. 建議不要使用System.Web程序集,因為它與SOLID原則沖突。 例如,如果我們使用System.Web並嘗試在Windows窗體/控制台/ WPF應用程序中使用該DLL,那么在該場景中上下文將始終保持為空。
  2. 例如,您可以要訪問data.txt文件夾下的文件App_data文件夾。 在DLL中,您應該使用以下代碼

    string rootDirectoryPath = AppDomain.CurrentDomain.BaseDirectory; string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", "data.txt");

而不是手動用引號和“\\”附加路徑和文件名,你應該在C#中使用Path.Combine方法(如上面的代碼所示)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM