gpt4 book ai didi

c# - 如果您的 ViewModel 是 IDisposable,MVC 会调用 Dispose 吗?

转载 作者:太空狗 更新时间:2023-10-30 00:52:01 25 4
gpt4 key购买 nike

假设您无法控制对象的创建和处置。在某些情况下您不需要。

以MVC为例。假设你有这样的事情:

interface IFoo : IDisposable { }

class HomeController
{
private IFoo _foo = null;

HomeController(IFoo foo)
{
_foo = foo;
}

ActionResult Index()
{
return View(_foo);
}
}

一旦您的对象被传递给 View ,您就几乎失去了对它的控制。

在这种情况下,我只能想到两种方法来缓解这种情况:

1) 如果疼,就不要做。换句话说,不要让您为 View 提供的内容是 IDisposable

2) 或者,与 1 相同,但如果您确实收到 IDisposable 并且您想将其传递给 View ,请不要传递 IDisposable。转换为不是 IDisposable 的对象,即使它涉及所有数据的副本,并自己调用 Dispose()。例如像这样:

ActionResult Index()
{
using(_foo)
{
return View((FooViewModel)_foo);
}
}

但是我很好奇。 MVC 是否会检查 IDisposable 并在完成渲染 View 后在 View 收到的任何状态上调用它?

最佳答案

ASP.NET MVC Controller 类已经实现了 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();
}
}

关于c# - 如果您的 ViewModel 是 IDisposable,MVC 会调用 Dispose 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com