Asp.net mvc Structuremap构造函数注入工作单元始终为空

Asp.net mvc Structuremap构造函数注入工作单元始终为空,asp.net-mvc,nhibernate,repository-pattern,structuremap,Asp.net Mvc,Nhibernate,Repository Pattern,Structuremap,我试图将unitofwork传递到我的通用基本存储库中,但当我尝试调用某些方法时,unitofwork并没有被传递到基本存储库中 场景:我将下面的userRepository完全插入到我的UserController中,当它调用userRepository.Save(user)时,由于unitofwork为null,它失败了。我不知道为什么 我正在使用nhibernate和structuremap。我想我把一切都连接好了,但这里有一些代码需要仔细检查: 以下是基本存储库: public clas

我试图将unitofwork传递到我的通用基本存储库中,但当我尝试调用某些方法时,unitofwork并没有被传递到基本存储库中

场景:我将下面的userRepository完全插入到我的UserController中,当它调用userRepository.Save(user)时,由于unitofwork为null,它失败了。我不知道为什么

我正在使用nhibernate和structuremap。我想我把一切都连接好了,但这里有一些代码需要仔细检查:

以下是基本存储库:

public class BaseRepository<T> : IRepository<T> where T : IAggregateRoot
{
  private readonly IUnitOfWork _unitOfWork;

  public BaseRepository(IUnitOfWork unitOfWork)
  {
    _unitOfWork = unitOfWork; 
  } 

  public BaseRepository()
  {}

  public void Save(T Entity)
  {
    _unitOfWork.Session.Save(Entity);
  }
}
  public class UserRepository : BaseRepository<User>, IUserRepository
  {
  }
公共类BaseRepository:IRepository,其中T:IAggregateRoot
{
私人只读i工作单元(unitof工作单元);;
公共基础存储库(IUnitOfWork unitOfWork)
{
_unitOfWork=unitOfWork;
} 
公共基本存储库()
{}
公共作废保存(T实体)
{
_unitOfWork.Session.Save(实体);
}
}
特定存储库:

public class BaseRepository<T> : IRepository<T> where T : IAggregateRoot
{
  private readonly IUnitOfWork _unitOfWork;

  public BaseRepository(IUnitOfWork unitOfWork)
  {
    _unitOfWork = unitOfWork; 
  } 

  public BaseRepository()
  {}

  public void Save(T Entity)
  {
    _unitOfWork.Session.Save(Entity);
  }
}
  public class UserRepository : BaseRepository<User>, IUserRepository
  {
  }
public类UserRepository:BaseRepository、IUserRepository
{
}
这是我的nhibernate结构图配置:

public NhibernateRegistry()
{
  For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();

  For(typeof(IRepository<>)).Use(typeof(BaseRepository<>));

  // Nhibernate Session 
  For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => context.GetInstance<ISessionFactory>().OpenSession());

  // Nhibernate SessionFactory
  For<ISessionFactory>().Singleton().Use(NhibernateHelper.CreateSessionFactory());
}`
public-NhibernateRegistry()
{
For().HybridHttpOrthReadLocalScope().Use();
用于(typeof(IRepository))。使用(typeof(BaseRepository));
//Nhibernate会议
For().HybridHttpOrthReadLocalScope().Use(context=>context.GetInstance().OpenSession());
//Nhibernate SessionFactory
For().Singleton().Use(NhibernateHelper.CreateSessionFactory());
}`
这是我的nhibernate http模块:

public class NHibernateModule : IHttpModule
{
  private IUnitOfWork _unitOfWork;

  public void Init(HttpApplication context)
  {
    context.BeginRequest += ContextBeginRequest;
    context.EndRequest += ContextEndRequest;
  }

  private void ContextBeginRequest(object sender, EventArgs e)
  {
    _unitOfWork = ObjectFactory.GetInstance<IUnitOfWork>();
  }

  private void ContextEndRequest(object sender, EventArgs e)
  {
    try { _unitOfWork.Commit();  }
    catch { _unitOfWork.Rollback();  }
    finally { Dispose(); }
  }

  public void Dispose()
  {
    if (_unitOfWork != null)
      _unitOfWork.Dispose();
  }
公共类NHibernateModule:IHttpModule
{
私人工作单位;
公共void Init(HttpApplication上下文)
{
context.BeginRequest+=ContextBeginRequest;
context.EndRequest+=ContextEndRequest;
}
私有void ContextBeginRequest(对象发送方,事件参数e)
{
_unitOfWork=ObjectFactory.GetInstance();
}
私有void ContextEndRequest(对象发送方,事件参数e)
{
尝试{u unitOfWork.Commit();}
catch{u unitOfWork.Rollback();}
最后{Dispose();}
}
公共空间处置()
{
如果(_unitOfWork!=null)
_unitOfWork.Dispose();
}

}

UserRepository需要一个构造函数,该构造函数接受IUnitOfWork并将其传递给BaseRepository构造函数。目前,UserRepository正在使用BaseRepository的无参数构造函数,因此没有注入IUnitOfWork。摆脱无参数构造函数,并确保所有派生类型都将IUnitOfWork传递给基。

用户存储库需要一个接受IUnitOfWork并将其传递给BaseRepository构造函数的构造函数。目前,UserRepository正在使用BaseRepository的无参数构造函数,因此没有注入IUnitOfWork。去掉无参数构造函数,并确保所有派生类型都将IUnitOfWork传递给基。

真不敢相信我错过了!是的,你的权利,我需要使用基地:(unitofwork)从基地存储库!真不敢相信我错过了!是的,你的权利,我需要使用基地:(unitofwork)从基地存储库!