8

我的业务层创建文件并需要将它们保存在App_Data我的 asp.net mvc 4 web 前端的文件夹中。

我可以Server.MapPath在业务层中使用来获取App_Data文件夹的物理路径。但我想避免System.Web在业务层中引用。

App_Data还有其他方法可以在业务层中获取路径吗?

4

4 回答 4

31

处理这个问题的正确方法是让表示层将路径传递到业务层。

换句话说,拥有业务层的目的是在 ui 和业务流程之间创建关注点分离。如果您强制业务流程了解 ui 层,那么您就违反了关注点分离。

有很多方法可以处理这个问题。您可以在构建业务层时将路径传递到业务层,例如通过构造函数初始化或通过依赖注入。或者你可以将它传递给方法调用。或者您可以创建某种形式的配置文件,您的业务层加载该文件包含路径。

有很多不违反关注点分离的方法。

于 2012-09-06T07:11:49.677 回答
18

您可以使用

string  path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";
于 2013-12-04T05:30:57.473 回答
5
string path = HostingEnvironment.MapPath("~\\App_Data");

这个对我有用

于 2015-09-12T05:38:52.913 回答
2

我知道这是一个老问题,但仍然是一个非常有效的问题。我已经在这里看到了所有答案,我想在这里写下所有知识中最好的笔记。

  1. It is recommended NOT to use System.Web assembly as it conflicts S.O.L.I.D principles. For Example, If we use System.Web and try to use that DLL in a Windows Form / Console / WPF application then context will always remain null in that scenario.
  2. For example you can want to access data.txt file under the folder App_data folder. In DLL you should use following Code

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

Rather than appending path and file name manually with quotes and "\" you should use Path.Combine Method in C# (as shown in code above).

于 2018-07-04T06:03:00.627 回答