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();
}

Ninject应该为UnitOfWork模式使用什么选项?

对于web应用程序使用InRequestScope()。不要忘记注册OnePerRequestModule,这样UnitOfWork/db上下文将在请求结束时被处理。


InRequestScope()扩展目前位于Ninject.Web.Common