2013-03-28 74 views
2

我为我认为应该成为ASP.NET MVC核心功能的东西创建了自己的逻辑。我在这里发布它,希望有人会告诉我如何在没有自定义代码的情况下实现这一目标,或者如果MVC团队的某个人看到了它,然后意识到它的重要性并在未来的MVC版本中实现它。ASP.NET MVC - IDisposable模型

所以,模型并不总是EF对象,它们可以是别的东西,也可以包含其他资源。特别是如果你使用ViewModels概念,他们有模型信息+任何其他应该为视图服务的概念。

无论如何,我发现自己的模型是IDisposable,我需要一种方式来处置它们。

经过大量的试验后,我结束了以下属性,它配置了一个IDisposable模型。它装饰我的基本控制器类,从而在任何执行的动作作品:

internal class ModelDisposerAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
      var model = filterContext.Controller.ViewData.Model as IDisposable; 
      if (model != null) 
        model.Dispose(); 

      base.OnResultExecuted(filterContext); 
    } 
} 

会很高兴听到你的想法! :)

干杯。

回答

0

该框架在返回 ActionResult后肯定会访问该模型。 ActionResults在 中调用Execute()方法来生成内容。

如果你需要处理控制器内的任何东西,你可以用 覆盖Controller.Dispose()。您可以从 该方法

In asp.net mvc, is it safe to have an IDisposable model?

+0

当然内出售你的模型,我发现了艰辛的道路。这就是为什么我使用OnResultExecuted,在处理View之后触发AFAIK(操作方法完成后的方式)。 – justabuzz 2013-03-28 07:49:11