Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在业务层中使用Server.MapPath_C#_Asp.net Mvc_Server.mappath_Business Layer - Fatal编程技术网

C# 在业务层中使用Server.MapPath

C# 在业务层中使用Server.MapPath,c#,asp.net-mvc,server.mappath,business-layer,C#,Asp.net Mvc,Server.mappath,Business Layer,我的业务层创建文件并需要将其保存在我的asp.net mvc 4 web前端的App_Data文件夹中 我可以在业务层中使用Server.MapPath来获取App\u Data文件夹的物理路径。但是我想避免在业务层中引用System.Web 在业务层中,是否有其他方法获取到App\u数据的路径?正确的处理方法是让表示层将路径传递到业务层 换句话说,拥有业务层的目的是在ui和业务流程之间创建关注点分离。如果您强制业务流程了解ui层,那么您违反了关注点的分离 有很多方法可以解决这个问题。在构建业务

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

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


在业务层中,是否有其他方法获取到
App\u数据的路径?

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

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

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

有很多方法可以做到这一点,但不会违反关注点的分离。

您可以使用

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

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

  • 建议不要使用
    System.Web
    程序集,因为它与S.O.L.I.D原则相冲突例如,如果我们使用
    System.Web
    并尝试在Windows窗体/控制台/WPF应用程序中使用该DLL,则在该场景中上下文将始终保持为空。
  • 例如,您可以访问文件夹
    App\u data
    下的
    data.txt
    文件。在DLL中,您应该使用以下代码

    string rootDirectoryPath=AppDomain.CurrentDomain.BaseDirectory;
    字符串pathFinalAccessFile=Path.Combine(rootDirectoryPath,“App_Data”,“Data.txt”)


  • 您不应该手动在路径和文件名后面加引号和“\”,而应该使用path.combined方法(如上面的代码所示)。

    实际上,我喜欢这种方法。它不会在ASP.NET上创建任何依赖项,只使用任何.NET应用程序通用的依赖项。唯一值得关注的是,如果你不小心的话,它会在某种程度上把事情与操作系统联系起来。HostingEnvironment是系统的一部分。有人可以告诉我为什么我的答案会被否决吗?很可能是因为你在其他帖子中重复了信息,除了使用Path.Combine这个小例外。
    string path = HostingEnvironment.MapPath("~\\App_Data");