lo tanto, tengo un método expuesto de un servicio WCF como tal:Directrices para Dispose() y Ninject
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;
}
que tienen un objeto DataUnitOfWork mundial (que implementa IDisposable) que obtiene una instancia por Ninject través de un constructor argumento cuando una llamada de servicio. cuando se recibe la depuración, si uso
using(_unitOfWork)
el objeto _unitOfWork se dispone inmediatamente después de salir del alcance continuación, se vuelve a llamar de nuevo por Ninject (aunque ha sido marcado como dispuesto, así que no pasa nada.) Sin la declaración using, Ninject maneja la eliminación.
En resumen, ¿hay una regla general para esto? He tenido miedo de todo lo que es identificable después de que todo lo que leo me indica que nunca lo use, o lo uso en ciertas situaciones eclécticas, pero siempre me ha confundido.
Se agradece cualquier entrada.
Ah, también mientras estoy aquí escribiendo de todos modos, ¿por qué exactamente hay una llamada a GC.SuppressFinalize() al desechar? ¿Cómo se diferencian Dispose y Finalize?
Respuestas encontradas en publicaciones similares: http://stackoverflow.com/questions/898828/c-sharp-finalize-dispose-pattern – Nate222
El 'SuppressFinalize' le dice al sistema de GC 'No se preocupe por llamar a' Finalize' cuando usted ha determinado que el objeto es basura ya que hemos realizado la limpieza gracias a alguien que explícitamente llamó 'Dispose' en él. Si no lo hace, el objeto permanece en la cola del finalizador y Desechar _se volverá a llamar desde la secuencia del Finalizador. –