Richtlinien für Dispose () und Ninject

So, ich habe eine Methode ausgesetzt, die von einem WCF-Dienst als solchen:

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

Ich habe eine Globale DataUnitOfWork Objekt (die IDisposable implementiert), die instanziiert von Ninject durch einen Konstruktor-argument, wenn ein service-Aufruf kommt. Beim Debuggen, wenn ich

using(_unitOfWork)

den _unitOfWork Objekt wird entsorgt unmittelbar nach dem gehen out of scope dann aufgerufen wird, wird wieder von Ninject (obwohl es war markiert als entsorgt, so passiert gar nichts). Ohne die using-Anweisung, Ninject übernimmt die Entsorgung.

Lange Rede kurzer Sinn, gibt es eine Faustregel dafür? Ich habe Angst vor den ganzen IDisposable Sache, nach allem, was ich lese, scheint zu zeigen, nie zu verwenden, oder verwenden Sie es in bestimmten vielseitige Situationen, aber es immer verwirrt mich.

Jede Eingabe wird sehr geschätzt.

Oh, auch während ich hier die Eingabe sowieso, warum genau gibt es einen Aufruf von GC.SuppressFinalize() bei der Entsorgung? Wie Dispose und Finalize unterscheiden?

InformationsquelleAutor der Frage Nate222 | 2012-04-19

Schreibe einen Kommentar