2011-05-14 77 views
1

我想將我的單元工作傳遞到我的通用基本存儲庫,但是當我嘗試調用unitofwork未傳遞到基本存儲庫的某些方法時。Structuremap構造函數注入工作單元始終爲空

這種情況:我將userRepository下面的代碼注入到我的UserController中一切正常,當它調用userRepository.Save(user)時,由於unitofwork爲null而失敗。我不知道爲什麼?

我使用nhibernate和結構圖。我正確地認爲香港專業教育學院有線一切了,但這裏是一些代碼來仔細檢查:

這是基礎資源庫:

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 
    { 
    } 

這是我的NHibernate structuremap配置:

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

這是我的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(); 
    } 

}

回答

4

UserRepository需要一個構造函數在IUnitOfWork和把它傳遞給BaseRepository構造函數。目前,UserRepository使用BaseRepository的無參數構造函數,所以沒有注入IUnitOfWork。擺脫無參數的構造函數,並確保所有派生類型都將IUnitOfWork傳遞給基類。

+0

不能相信我錯過了!是的你的權利,我需要從基地庫使用基地:(單位工作)! – gdp 2011-05-15 13:34:30