Scoped unit-of-work implementation that supports Entity Framework Core and NHibernate out of the box.
dotnet add package FubarDev.UnitOfWork.NhSessionThe yourSessionFactory must already contain an instance of ISessionFactory.
varservices=newServiceCollection();services.AddSingleton(yourSessionFactory).AddUnitOfWork<ISession>().Use<NhRepositoryManager>();varserviceProvider=services.BuildServiceProvider();classYourService{privatereadonlyIUnitOfWorkFactory<ISession>_factory;publicYourService(IUnitOfWorkFactory<ISession>factory){_factory=factory;}publicasyncTaskYourTransactionalServiceOperationAsync(CancellationTokencancellationToken){// Create a new unit of work (with transaction)awaitusingvarunitOfWork=await_factory.CreateTransactionalAsync(cancellationToken);// Access the NHibernate session and do something with itvarsession=unitOfWork.Repository;// Commit all changesawaitunitOfWork.CommitAsync(cancellationToken);}}dotnet add package FubarDev.UnitOfWork.EfCoreThe yourSessionFactory must already contain an instance of ISessionFactory.
varservices=newServiceCollection();services.AddDbContextFactory<YourDbContext>(dcob =>{// Configure EF Core optionsdcob.UseSqlite(_connection);}).AddUnitOfWork<YourDbContext>().Use<EfCoreRepositoryManager<YourDbContext>>();varserviceProvider=services.BuildServiceProvider();classYourService{privatereadonlyIUnitOfWorkFactory<YourDbContext>_factory;publicYourService(IUnitOfWorkFactory<YourDbContext>factory){_factory=factory;}publicasyncTaskYourTransactionalServiceOperationAsync(CancellationTokencancellationToken){// Create a new unit of work (with transaction)awaitusingvarunitOfWork=await_factory.CreateTransactionalAsync(cancellationToken);// Access the DB context and do something with itvardbContext=unitOfWork.Repository;// Commit all changesawaitunitOfWork.CommitAsync(cancellationToken);}}