所以,我有一个从 WCF 服务公开的方法:
public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
var response = new GetAllCommentsResponse();
using(_unitOfWork)
try
{
Guard.ArgNotNull(request, "request");
var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();
//... Do rest of stuff here
}
catch (Exception ex)
{
response.Success = false;
response.FailureInformation = ex.Message;
Logger.LogError("GetAllComments Method Failed", ex);
}
return response;
}
我有一个全局 DataUnitOfWork 对象(它实现了 IDisposable),当服务调用进入时,它由 Ninject 通过构造函数参数实例化。调试时,如果我使用
using(_unitOfWork)
_unitOfWork 对象在超出范围后立即被释放,然后被 Ninject 再次调用(尽管它已被标记为已释放,所以没有任何反应。)如果没有 using 语句,Ninject 会处理释放。
长话短说,这有一般的经验法则吗?在我读到的所有内容似乎都表明永远不要使用它或在某些不拘一格的情况下使用它之后,我一直害怕整个 IDisposable 东西,但它总是让我感到困惑。
任何输入表示赞赏。
哦,当我在这里打字的时候,为什么在处理时会调用 GC.SuppressFinalize() 呢?Dispose 和 Finalize 有何不同?