Decoradores e IDisposable.

Tengo una subclase deDbContext

public class MyContext : DbContext { }

y tengo unIUnitOfWork abstracción alrededorMyContext que implementaIDisposable para garantizar que las referencias tales comoMyContext se eliminan en el momento adecuado

public interface IUnitOfWork : IDisposable { }

public class UnitOfWork : IUnitOfWork 
{
    private readonly MyContext _context;

    public UnitOfWork()
    {
        _context = new MyContext();
    }

    ~UnitOfWork()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private bool _disposed;

    protected virtual void Dispose(bool disposing)
    {
        if (_disposed) return;

        if (disposing)
        {
            if (_context != null) _context.Dispose();
        }

        _disposed = true;
    }
}

MiUnitOfWork está registrado con un alcance de por vida de solicitud (web). Tengo decoradores deIUnitOfWork que podría registrarse como transitorio o de por vida y mi pregunta es qué deberían hacer con respecto a la implementaciónIDisposable - específicamente si deberían o no deberían pasar la llamada aDispose().

public class UnitOfWorkDecorator : IUnitOfWork
{
    private readonly IUnitOfWork _decorated;

    public UnitOfWorkDecorator(IUnitOfWork decorated)
    {
        _decorated = decorated;
    }

    public void Dispose()
    {
        //do we pass on the call?
        _decorated.Dispose();
    }
}    

Veo 2 opciones (supongo que la opción 2 es la respuesta correcta):

Se espera que cada Decorador sepa si tiene un alcance transitorio o de por vida. Si un decorador es transitorio, entonces no debe llamarDispose() En la instancia decorada. Si es ámbito de por vida, debería.Cada decorador solo debe preocuparse por deshacerse de sí mismo y debeNunca Transmitir la llamada a la instancia decorada. El contenedor gestionará la llamada aDispose() para cada objeto en la cadena de llamadas en el momento adecuado. Un objeto solo debeDispose() De las instancias que encapsula y la decoración no es encapsulación.

Respuestas a la pregunta(3)

Su respuesta a la pregunta