我的业务层创建文件并需要将它们保存在App_Data
我的 asp.net mvc 4 web 前端的文件夹中。
我可以Server.MapPath
在业务层中使用来获取App_Data
文件夹的物理路径。但我想避免System.Web
在业务层中引用。
App_Data
还有其他方法可以在业务层中获取路径吗?
我的业务层创建文件并需要将它们保存在App_Data
我的 asp.net mvc 4 web 前端的文件夹中。
我可以Server.MapPath
在业务层中使用来获取App_Data
文件夹的物理路径。但我想避免System.Web
在业务层中引用。
App_Data
还有其他方法可以在业务层中获取路径吗?
处理这个问题的正确方法是让表示层将路径传递到业务层。
换句话说,拥有业务层的目的是在 ui 和业务流程之间创建关注点分离。如果您强制业务流程了解 ui 层,那么您就违反了关注点分离。
有很多方法可以处理这个问题。您可以在构建业务层时将路径传递到业务层,例如通过构造函数初始化或通过依赖注入。或者你可以将它传递给方法调用。或者您可以创建某种形式的配置文件,您的业务层加载该文件包含路径。
有很多不违反关注点分离的方法。
您可以使用
string path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";
string path = HostingEnvironment.MapPath("~\\App_Data");
这个对我有用
我知道这是一个老问题,但仍然是一个非常有效的问题。我已经在这里看到了所有答案,我想在这里写下所有知识中最好的笔记。
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. 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).