我如何将会话传递给存储库类?
假设我有两个项目。
1)TestSuite 2)BusinessObjects
存储库包含在BusinessObjects项目中。 NHibernate会话在TestSuite项目中打开。现在,我想使用相同的会话,因为TestSuite项目在该会话上启动了一个事务。目前,我使用以下内容:
var repository = new CustomerRepository(_session);
当然,这看起来很难看!我想某种方式可以挂钩依赖注入框架,并为我提供ISession对象,而不必传递到存储库。
答案 0 :(得分:1)
在我们的WCF服务中,我们实际使用UnitOfWork,它包装单个操作并存储该操作的ISession。
存储库知道如何从当前运行的工作单元中获取ISession。
在测试方面,我们有一个基础测试类,任何包含触及数据库的测试的测试类都继承自。然后,我们控制testfixturesetup中一个工作单元的开始和结束。一旦你习惯了在NUnit版本中我们使用拆解不能保证运行(如果在安装或测试期间出现未处理的异常),我们的工作效果相当不错。