Использование 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");

Меня устраивает

Я знаю, это старый вопрос, но все еще очень правильный. Я видел все ответы здесь, и я хочу написать заметки лучших из всех знаний здесь.

  1. Рекомендуется НЕ использовать System.Web сборка как бы противоречит твердым принципам. Например, если мы используем System.Web и попробуйте использовать эту DLL в приложении Windows Form / Console / WPF, тогда контекст в этом сценарии всегда будет нулевым.
  2. Например, вы можете получить доступ к data.txt файл в папке App_data папка. В DLL вы должны использовать следующий код

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

Вместо добавления пути и имени файла вручную с кавычками и "\" вы должны использовать метод Path.Combine в C# (как показано в коде выше).

Другие вопросы по тегам