虽然我非常新,但为了学习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