Diretrizes para Dispose () e Ninject

Então, eu tenho um método exposto de um serviço WCF como tal:

<code>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;
}
</code>

Eu tenho um objeto DataUnitOfWork global (que implementa IDisposable) que é instanciado por Ninject através de um argumento de construtor quando uma chamada de serviço vem dentro. Ao depurar, se eu usar

<code>using(_unitOfWork)
</code>

o objeto _unitOfWork é descartado imediatamente depois de sair do escopo, em seguida, é chamado novamente por Ninject (embora tenha sido marcado como descartado, portanto, nada acontece). Sem a instrução using, o Ninject manipula o descarte.

Longa história curta, existe uma regra geral para isso? Eu tenho medo de toda a coisa descartável depois que tudo que eu leio parece indicar nunca usá-la, ou usá-la em certas situações ecléticas, mas isso sempre me confunde.

Qualquer entrada é apreciada.

Ah, também enquanto estou aqui digitando mesmo assim, por que exatamente há uma chamada para GC.SuppressFinalize () ao descartar? Como Dispose e Finalize diferem?

questionAnswers(1)

yourAnswerToTheQuestion