Lignes directrices Pour l'Dispose() et Ninject

J'ai une méthode exposé à partir d'un service WCF en tant que tel:

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

J'ai un mondial DataUnitOfWork objet (qui implémente IDisposable) qui est instanciée par Ninject par le biais d'un constructeur argument lors de l'appel de service est en. Lors du débogage, si j'utilise

using(_unitOfWork)

la _unitOfWork objet obtient éliminés immédiatement après de sortir du champ d'application obtient alors appelé à nouveau par Ninject (même si ça a été marquée comme étant éliminés, de sorte que rien ne se passe.) Sans l'aide de déclaration, Ninject poignées de le mettre au rebut.

Longue histoire courte, est-il une règle générale pour que cela? J'ai été effrayé de l'ensemble de la IDisposable chose après tout ce que j'ai lu semble indiquer de ne jamais l'utiliser, ou d'utiliser d'une certaine éclectique situations, mais c'est toujours confus moi.

Toute entrée est appréciée.

Oh, aussi alors que je suis ici en tapant de toute façon, pourquoi exactement est-il un appel à la GC.SuppressFinalize() lors de l'élimination? Comment faire Céder et de Finaliser diffèrent-ils?

  • Trouvé réponse dans poste similaire: stackoverflow.com/questions/898828/...
  • Le SuppressFinalize raconte l'GC système " Ne vous inquiétez pas à propos de l'appel de Finalize lorsque vous avez déterminé l'objet est d'ordures comme nous l'avons déjà effectué le nettoyage grâce à quelqu'un explicityl appel Dispose sur elle. Si vous ne le faites pas, l'objet reste sur le finaliseur file d'attente et de Disposer sera appelée à nouveau à partir de l'outil de finalisation fil.
InformationsquelleAutor Nate222 | 2012-04-19