Dekoratorzy i identyfikowalne

Mam podklasęDbContext

public class MyContext : DbContext { }

i mamIUnitOfWork abstrakcja wokółMyContext to implementujeIDisposable aby zapewnić, że odniesienia takie jakMyContext są usuwane w odpowiednim czasie

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

MójUnitOfWork jest zarejestrowany z zakresem życia na żądanie (WWW). Mam dekoratorówIUnitOfWork które mogłyby zostać zarejestrowane jako okresowe lub okresowe, a moje pytanie brzmi: co należy zrobić w odniesieniu do wdrażaniaIDisposable - w szczególności powinni oni lub nie powinni przekazywać połączeniaDispose().

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

Widzę 2 opcje (domyślam się, że opcja 2 to poprawna odpowiedź):

Oczekuje się, że każdy Dekorator będzie wiedział, czy ma charakter przejściowy, czy też będzie miał czas życia. Jeśli dekorator jest przejściowy, nie powinien zadzwonićDispose() na ozdobnym egzemplarzu. Jeśli jest to okres życia, powinien to być.Każdy dekorator powinien zajmować się wyłącznie pozbywaniem się i powiniennigdy przekazać połączenie do zdobionej instancji. Kontener będzie zarządzał połączeniem doDispose() dla każdego obiektu w łańcuchu połączeń w odpowiednim czasie. Obiekt powinien być tylkoDispose() w przypadkach, gdy zawiera on i dekoruje, nie jest enkapsulacją.

questionAnswers(3)

yourAnswerToTheQuestion