假设您无法控制对象的创建和处置。在某些情况下您不这样做。
以MVC为例。假设您有这样的事情:
interface IFoo : IDisposable { }
class HomeController
{
private IFoo _foo = null;
HomeController(IFoo foo)
{
_foo = foo;
}
ActionResult Index()
{
return View(_foo);
}
}
将对象传递给视图后,您几乎会失去对它的控制。
在这种情况下,我只能想到两种缓解这种情况的方法:
1)如果很痛,请不要这样做。换句话说,不要让您提供的观点成为IDisposable
事实。
2)或与1相同,但是如果您确实收到,IDisposable
并且想要将其传递给视图,则不要传递IDisposable
。即使涉及所有数据的副本,也可以将其强制转换为不IDisposable
属于Dispose()
自己的东西,然后自称。例如:
ActionResult Index()
{
using(_foo)
{
return View((FooViewModel)_foo);
}
}
但是我很好奇。IDisposable
渲染完视图后,MVC是否检查并在视图接收到的任何状态上调用它?
ASP.NET MVCController
类已经实现IDisposable
。如果在执行请求后还需要进行进一步的清理,则可以覆盖该Dispose
方法。在您的示例中,它看起来像:
public class HomeController
{
private IFoo _foo = null;
// Your code as usual
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if(disposing && _foo != null)
_foo.Dispose();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句