Is the controller being disposed after using ViewRenderer

74 views Asked by At

I'm using ViewRenderer to write view result to a file like so:

    public class WriteViewToFile
    {
        private DetailsController controller = ViewRenderer.CreateController<DetailsController>();

        public void WriteDataToFile(ContextDB db, DataViewModel model, string fileName)
        {

            string html = ViewRenderer.RenderView("~/Views/Details/TemplateForData.cshtml", model, controller.ControllerContext);

            File.WriteAllText(fileName, html);
            // controller.dispose();
        }
        public void WriteOtherToFile(ContextDB db, OtherViewModel model, string fileName)
        {

            string html = ViewRenderer.RenderView("~/Views/Details/TemplateForOther.cshtml", model, controller.ControllerContext);

            File.WriteAllText(fileName, html);
            // controller.dispose();
        }
    }

Should I add controller.dispose() in the end or is this done automatically? if yes, is there a way to dispose of it after any of the methods are called?

1

There are 1 answers

3
Scott Hannen On

You could separate that behavior into its own method:

public void WriteToFile(ContextDB db, DataViewModel model, string fileName)
{
    string html = RenderView(model);
    File.WriteAllText(fileName, html);
}

private string RenderView(model)
{
    using(var controller = ViewRenderer.CreateController<DetailsController>())
    {
        return ViewRenderer.RenderView("~/Views/Details/Template.cshtml", 
            model, controller.ControllerContext);
    }
}

Now your controller is being created, used, and then disposed.