Wskazówki dla Dispose () i Ninject

Tak więc mam metodę wystawioną z usługi WCF jako taką:

<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>

Mam globalny obiekt DataUnitOfWork (który implementuje IDisposable), który jest tworzony przez Ninject poprzez argument konstruktora, gdy przychodzi wywołanie usługi. Podczas debugowania, jeśli używam

<code>using(_unitOfWork)
</code>

obiekt _unitOfWork zostaje usunięty natychmiast po wyjściu z zakresu, a następnie zostaje ponownie wywołany przez Ninject (chociaż został oznaczony jako usunięty, więc nic się nie dzieje.) Bez instrukcji using Ninject obsługuje utylizację.

Krótko mówiąc, czy istnieje ogólna zasada? Bałem się całej rzeczy IDisposable po tym, jak wszystko, co przeczytałem, wskazuje na to, że nigdy jej nie używam lub nie używam w pewnych eklektycznych sytuacjach, ale zawsze mnie to myli.

Każdy wkład jest doceniany.

Aha, i tak, póki tu piszę, dlaczego właściwie jest wywołanie GC.SuppressFinalize () podczas usuwania? Czym się różnią utylizacja i finalizacja?

questionAnswers(1)

yourAnswerToTheQuestion