Рекомендации по удалению ()и Ninject

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

31
задан Blorgbeard 26 June 2014 в 22:42
поделиться