Ninject应该为UnitOfWork模式使用什么选项?
本文关键字:什么 选项 模式 UnitOfWork Ninject | 更新日期: 2023-09-27 17:50:51
我在mvc项目中实现工作单元模式,
public class UnitOfWork : IUnitOfWork
{
private TransactionScope _transaction;
private readonly BodoShopEntities _db;
public UnitOfWork()
{
_db = new BodoShopEntities();
}
public void Dispose()
{
if (_db != null)
{
_db.Dispose();
}
System.GC.SuppressFinalize(this);
}
public void StartTransaction()
{
_transaction = new TransactionScope();
}
public void Commit()
{
_db.SaveChanges();
_transaction.Complete();
}
public DbContext Db
{
get { return _db; }
}
}
也是repository pattern,
public partial interface IRepository<T> where T : class
{
T GetById(object id);
void Insert(T entity);
void Update(T entity);
void Delete(T entity);
IQueryable<T> Table { get; }
T Single(object primaryKey);
T SingleOrDefault(object primaryKey);
bool Exists(object primaryKey);
IUnitOfWork UnitOfWork { get; }
}
在Ninject中,我使用InThreadScope作为工作单元,这是正确的吗?
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(typeof(IUnitOfWork)).To(typeof(UnitOfWork)).InThreadScope();
}
对于web应用程序使用InRequestScope()
。不要忘记注册OnePerRequestModule
,这样UnitOfWork
/db上下文将在请求结束时被处理。
InRequestScope()
扩展目前位于Ninject.Web.Common