Cercando di capire come mantenere puliti i metodi di classe, seguire le indicazioni di EF su DbContexts di breve durata e utilizzare DI in WPF. Il problema che sto riscontrando è l'implementazione delle transazioni con DI. Sto cercando di capire quale sia il modo migliore per gestirlo:
public class Repository : IRepository
{
public Repository(MyDbContext dataContext) { /* blah */ }
public void Add(BLLEntity entity) { /* blah */ }
public void GetById(int id) { /* return entity */ }
}
public class NonTransactionalAppService
{
public AppService(IRepository repo) { /* blah */ }
public AddNewAccount(Account account) // Issue: Not transactional
{
// do some stuff....
repo.Add(account);
}
}
public class TransactionalAppService
{
public TransactionalAppService(IRepositoryFactory repoFactory, DbContextFactory factory) { /* blah */ }
public AddNewAccount(Account account) // Issue: Transactional, but odd?? And requires me to create the repositories with every call.
{
using (var db = factory.Create()
{
IRepo repo = repoFactory.Create(db);
repo.Add(account);
}
}
}
Quindi, come posso gestire le transazioni, mantenere DI per migliori test unitari e iniettare solo ciò che è necessario senza iniettare fabbriche ovunque?
Questo è per un'applicazione WPF desktop e non voglio usare un framework DI.
EF ha una guida per usare un DbContext per modulo, ma come gestirlo con il Composition Root? Presumo che avrei bisogno di un tipo di FormFactory che creerebbe un modulo e inietti tutte le dipendenze richieste per includere DbContext.