Согласен, это правильный способ создания файла на BLL (уровень приложения).Посмотрите, как мы справились с этим в нашем проекте .Это немного сложнее, потому что наша модель экспорта / импорта подключаема, но, возможно, это может иметь смысл для вас.
Сначала мы описали 2 интерфейса:
/// <summary>
/// Defines methods and properties for an import provider.
/// </summary>
public interface IImportProvider : IExtension
{
#region Methods
/// <summary>
/// Imports a data.
/// </summary>
/// <param name="data">The data to be imported.</param>
/// <param name="mimeType">The data MIME type.</param>
void Import(byte[] data, string mimeType);
#endregion
}
public interface IExportProvider : IExtension
{
#region Methods
/// <summary>
/// Exports a data.
/// </summary>
/// <param name="mimeType">Contains the data MIME type when this method returns.</param>
/// <returns>The exported date.</returns>
byte[] Export(ref string mimeType);
#endregion
}
Мы можем реализовать эти интерфейсыдля любого вида импорта / экспорта.Итак, мы обрабатываем данные импорта / экспорта на уровне BLL (уровень приложения), а затем, в случае экспорта, отправляем их на уровень представления (уровень веб-сайта).Уровень представления разрешает расширения файлов по типу MIME и возвращает результат File:
return File(data, mimeType, String.Format("export.{0}", MimeTypeHelper.GetExtByMimeType(mimeType)));
Таким образом, уровню представления не требуется знать, какой формат импорта / экспорта использовался.Все, что требуется на уровне представления для получения / отправки данных от пользователя.