如何使用依赖注入将工作单元容器传递到存储库的构造函数中

时间:2010-07-23 11:30:27

标签: asp.net nhibernate dependency-injection repository-pattern isession

我正在尝试研究如何在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的构造函数中?

或者这种模式完全错了?

再次感谢您的建议。

大卫

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

答案 2 :(得分:0)