J'ai été capable de mettre en œuvre une unité de travail un peu sympa pour travailler avec framework d'entité.Mise en œuvre d'UnitOfWork
je suis venu avec ..
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();
}
}
}
Je suis assez sûr que tout le monde est jaloux de cette unité de travail maintenant. (Kidding)
Mais j'ai un petit problème de conception dans cette couche de service.
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);
}
}
}
Le problème est que l'unité de travail a besoin d'une injection de base de données, donc je ne peux pas en créer une instance. Je ne peux pas fournir une unité de travail directement dans la couche de service car cela n'aurait aucun sens puisque l'unité de travail doit être jetable. Et comme j'utilise le référentiel pour ajouter mon contenu il n'y a pas besoin d'accéder directement à l'unité de travail, la sauvegarde se fera automatiquement quand elle sera disposée de toute façon.
Je pourrais injecter l'IDatabaseFactory dans ma couche de service mais l'idée est de ne pas l'utiliser là. En fait, la couche de service ne devrait pas savoir à ce sujet.
Que diriez-vous d'une usine UnitOfWork?
Des idées ou des suggestions sur comment je peux résoudre ce problème?
Merci.
Une usine 'UnitOfWork' semble fonctionner. Mais le problème est alors de savoir comment fournir 'IDatabaseFactory' à votre' UnitOfWorkFactory'. – yuxhuang
Injection de DI dans le constructeur? – Rushino