雖然我非常新,但爲了學習nhibernate和DI與結構圖,所以我正在製作一個應用程序來測試所有東西。將我的UnitOfWork注入到我的Repository構造器中
我有一些問題注入我的基礎知識庫到我的基礎知識庫。我爲每個請求創建一個單元工作,然後在最後提交或回滾。但是,當我嘗試在我的方法中使用它時試圖將其注入到我的基本存儲庫中時,它始終爲空。更具體地說,我得到這個錯誤:「對象引用未設置爲對象的實例」。任何想法即時做錯了,如果這是我應該去的正確路線?
非常感謝提前。
基礎信息庫:
public abstract class Repository<T> : IRepository<T>
{
public readonly IUnitOfWork _unitOfWork;
public Repository(IUnitOfWork UnitOfWork)
{
UnitOfWork = _unitOfWork;
}
public Repository() {}
public void Save(T obj)
{
_unitOfWork.CurrentSession.Save(obj);
}
}
StructureMap註冊表多數民衆贊成在我的Application_Start設置:
public class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => context.GetInstance<ISessionFactory>().OpenSession());
For<ISessionFactory>().Singleton().Use(NHibernateSessionFactory.GetSessionFactory());
}
}
更新:
的baserepository由特定repositorys繼承,即ArticleRepository然後即時注入到這一點我application_start上的aspx頁面。然後,我的aspx頁面繼承buildUp發生的basepage。我訪問存儲庫這樣的:
public IArticleRepository ArticleRepo { get; set; }
public void SaveThing()
{
ArticleRepo.Save(object);
}
調用此方法上的Application_Start:
public class Bootstrapper
{
public static void BootStrap()
{
ObjectFactory.Configure(x =>
{
x.AddRegistry<NHibernateRegistry>();
x.AddRegistry<WebRegistry>();
});
}
}
,並在webregistry:
For<IArticleRepository>().Use<ArticleRepository>();
你如何實例化你的倉庫? – mxmissile 2011-02-24 22:48:09
@geepie多數民衆贊成你如何註冊它,你如何「獲得」的.aspx頁面IArticleRepository的一個實例? – mxmissile 2011-02-24 23:28:03
我會假設他只是在做var repository = ObjectFactory.GetInstance(); –
Phill
2011-02-24 23:50:00