Интересная штука
Есть у меня действие в контроллере для генерации xlsx файла при помощи NPOI примерно такого вида
public ActionResult GenerateReport(DateTime? dtStart, DateTime? dtFinish)
{
//...
//Создаем книгу через Singleton
hssfwb = Hsswb.getInstance();
//...
//Отдаем результат
MemoryStream output = new MemoryStream();
HSSFFormulaEvaluator.EvaluateAllFormulaCells(hssfwb);
hssfwb.Write(output);
return File(output.ToArray(), "application/vnd.ms-excel", DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx");
}
Работа с книгой реализована через Singleton
protected static XSSFWorkbook hssfwb { get; set; }
class Hsswb
{
private static XSSFWorkbook instance;
private Hsswb()
{
}
public static XSSFWorkbook getInstance()
{
if (instance == null)
{
instance = new XSSFWorkbook();
}
return instance;
}
}
Вызывается генерация отчета вот так /Home/GenerateReport?dtStart=2017-04-10&dtStart=2017-04-17
Только даты меняются.
И получается, что после первой генерации отчета все остальные генерятся с теми же параметрами, с которыми сгенерил отчет в первый раз, т к вот эта проверка
if (instance == null)
{
instance = new XSSFWorkbook();
}
дает что instance не null, а экземпляр, созданный в первый раз.
Как так может получаться? В моем понимании, если я перегружаю страницу, да еще и с другими GET параметрами, все экземпляры классов должны создаваться заново, откуда старый экземпляр?