Использование Server.MapPath в бизнес-уровне
Мой бизнес-уровень создает файлы и должен сохранять их в App_Data
папка моего веб-интерфейса asp.net mvc 4.
Я мог бы использовать Server.MapPath
на бизнес-уровне, чтобы получить физический путь App_Data
папка. Но я хочу избежать ссылки на System.Web
на бизнес-уровне.
Есть ли другие способы получить путь к App_Data
на бизнес уровне?
4 ответа
Правильный способ справиться с этим - сделать так, чтобы уровень представления передавал путь в бизнес-уровень.
Иными словами, цель создания бизнес-уровня состоит в том, чтобы создать разделение проблем между пользовательским интерфейсом и бизнес-процессами. Если вы заставите бизнес-процесс узнать об уровне пользовательского интерфейса, то вы нарушаете это разделение интересов.
Есть несколько способов справиться с этим. Вы можете передать путь в бизнес-уровень, когда бизнес-уровень создается, например, с помощью инициализации конструктора или внедрения зависимостей. Или вы можете передать его в вызов метода. Или вы можете создать какую-то форму файла конфигурации, который загружает ваш бизнес-уровень и который содержит путь.
Есть много способов сделать это, которые не нарушают разделения интересов.
Ты можешь использовать
string path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";
string path = HostingEnvironment.MapPath("~\\App_Data");
Меня устраивает
Я знаю, это старый вопрос, но все еще очень правильный. Я видел все ответы здесь, и я хочу написать заметки лучших из всех знаний здесь.
- Рекомендуется НЕ использовать
System.Web
сборка как бы противоречит твердым принципам. Например, если мы используемSystem.Web
и попробуйте использовать эту DLL в приложении Windows Form / Console / WPF, тогда контекст в этом сценарии всегда будет нулевым. Например, вы можете получить доступ к
data.txt
файл в папкеApp_data
папка. В DLL вы должны использовать следующий кодstring rootDirectoryPath = AppDomain.CurrentDomain.BaseDirectory; string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", "data.txt");
Вместо добавления пути и имени файла вручную с кавычками и "\" вы должны использовать метод Path.Combine в C# (как показано в коде выше).