Implementación de UnitOfWork

He podido implementar una pequeña unidad de trabajo genial para trabajar con el marco de la entidad.

Se me ocurrio ..

public class UnitOfWork : IUnitOfWork
    {
        private Database _database;
        private IDatabaseFactory _databaseFactory;

        private DbTransaction transaction;

        public UnitOfWork(IDatabaseFactory databaseFactory)
        {
            _databaseFactory = databaseFactory;
            _database = Database;

            transaction = _database.Database.Connection.BeginTransaction();
        }

        public Database Database
        {
            get { return _database ?? (_database = _databaseFactory.Get()); }
        }

        public void Dispose()
        {
            try
            {
                _database.SaveChanges();
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
            }
        }
    }

Estoy bastante seguro de que todos están celosos de esta unidad de trabajo ahora. (Bromeando)

Pero tengo un pequeño problema de diseño en esta capa de servicio.

public class JournalService : IJournalService
    {
        IJournalRepository _journalRepository;

        public JournalService(IJournalRepository journalRepository)
        { 
            _journalRepository = journalRepository;
        }

        public void AjouterJournal(Journal j)
        {
           [B]using (IUnitOfWork uow = new UnitOfWork())[/B]
            {
                var journal = new Journal();
                journalRepository.AddJournal(journal);

            }
        }
    }

El problema es que la unidad de trabajo necesita una inyección de base de datos, así que no puedo crear una instancia de ella. No puedo proporcionar una unidad de trabajo directamente en la capa de servicio porque no tendría sentido ya que la unidad de trabajo debe ser desechable.

Y debido a que uso el repositorio para agregar mis cosas, no es necesario acceder directamente a la unidad de trabajo, el ahorro se producirá automáticamente cuando se elimine de todos modos.

Podría inyectar el IDatabaseFactory en mi capa de servicio, pero la idea es no usarlo allí. En realidad, la capa de servicio no debería saberlo.

¿Qué tal una fábrica de UnitOfWork?

¿Alguna idea o sugerencia sobre cómo puedo solucionar esto?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta