Итак, у меня есть метод, предоставляемый службой 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?