在业务层中使用Server.MapPath
我的业务层创建文件,需要将它们保存在我的asp.net mvc 4 web前端的App_Data
文件夹中。
我可以在业务层中使用Server.MapPath
来获取App_Data
文件夹的物理路径。 但我想避免在业务层中引用System.Web
。
是否有其他方法可以在业务层中获取App_Data
的路径?
处理此问题的正确方法是使表示层将路径传递到业务层。
换句话说,拥有业务层的目的是在ui和业务流程之间创建关注点分离。 如果您强制业务流程了解ui层,那么您就违反了关注点。
有很多方法可以解决这个问题。 您可以在构造业务层时将路径传递到业务层,例如通过构造函数初始化或通过dependency injection。 或者您可以将其传递给方法调用。 或者,您可以创建某种forms的配置文件,业务层加载包含该路径的配置文件。
有很多方法可以解决这个问题。
您可以使用
string path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";
string path = HostingEnvironment.MapPath("~\\App_Data");
这个对我有用
我知道这是一个古老的问题但仍然是一个非常有效的问题。 我在这里看到了所有的答案,我想在这里写下最好的知识笔记。
- 建议不要使用
System.Web
程序集,因为它与SOLID原则冲突。 例如,如果我们使用System.Web
并尝试在Windows窗体/控制台/ WPF应用程序中使用该DLL,那么在该场景中上下文将始终保持为空。 -
例如,您可以访问
data.txt
文件夹下的data.txt
文件。 在DLL中,您应该使用以下代码string rootDirectoryPath = AppDomain.CurrentDomain.BaseDirectory; string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", "data.txt");
而不是手动用引号和“\”附加路径和文件名,你应该在C#中使用Path.Combine方法(如上面的代码所示) 。