我正在尝试研究如何在ASP.NET Web应用程序中完成Repository模式的实现。
目前,每个域类都有一个存储库接口,用于定义例如加载和保存该类的实例。
每个存储库接口都由一个执行NHibernate工作的类实现。 Castle Windsor根据web.config将类的DI排序到界面中。下面提供了一个实现类的示例:
public class StoredWillRepository : IStoredWillRepository
{
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
NHibernateUtil.Initialize(storedWill);
}
return storedWill;
}
public void Save(StoredWill storedWill)
{
using (ISession session = NHibernateSessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.SaveOrUpdate(storedWill);
transaction.Commit();
}
}
}
}
正如前一个线程所指出的,存储库类需要接受一个工作单元容器(即ISession),而不是在每个方法中实例化它。
我预计工作单元容器将在需要时由每个aspx页面创建(例如,在属性中)。
当Windsor为我创建时,如何指定将此工作单元容器实例传递到StoredWillRepository的构造函数中?
或者这种模式完全错了?
再次感谢您的建议。
大卫
答案 0 :(得分:1)
答案 1 :(得分:0)
答案 2 :(得分:0)