我正在使用一个相当简单的DI模式将我的数据存储库注入到我的控制器类中,并且我在每个模式下获得CA2000代码分析警告(在丢失范围之前调用对象)。我知道为什么警告正在发生,并且通常可以弄清楚如何解决它,但在这种情况下我无法弄清楚
try/finally
块来摆脱错误。在我放弃并抑制所有地方的警告信息之前,是否有更好的方法来实现同样的效果,而不会产生潜在的未曝光物体?
public class AccountController : Controller
{
public AccountController ()
: this(new SqlDataRepository())
{
}
public AccountController ( IDataRepository db )
{
this.db = db ?? new SqlDataRepository();
// Lots of other initialization code here that I'd really like
// to avoid duplicating in the other constructor.
}
protected override void Dispose(bool disposing)
{
if (disposing && (this.db != null))
{
IDisposable temp = this.db as IDisposable;
if (temp != null)
{
temp.Dispose();
}
}
}
}
答案 0 :(得分:1)
如果您使用的是ASP.Net MVC,您可以让您的控制器实现IDisposable
,管道将负责为您处理它。请参阅ASP MVC: When is IController Dispose() called?。
答案 1 :(得分:0)
您的存储库实现了IDisposable。使您的控制器也实现IDisposable,并在dispose方法中清理您的存储库。