我们正在构建一个 ASP.NET MVC 站点,我正在努力在哪里定义一个连接以最好地启用单元测试(我一般使用“连接” - 它可以是会话、连接、适配器或任何其他类型可以管理事务和数据库操作的数据上下文)。
假设我们有 3 个类:
UserController
UserService
UserRepository
过去,我们会在 UserService 的方法中做这样的事情:
Using (ISomeSession session = new SomeSession())
{
session.StartTransaction();
IUserRepository rep = new UserRepository(session);
rep.DoSomething();
rep.Save();
session.Commit();
}
但是,由于没有注入对 SomeSession 的依赖,因此实际上不可能对此进行单元测试。但是,如果我们使用 DI 将依赖项注入到 UserService 中,则会话会在 UserService 的生命周期内挂起。如果有多个从 UserController 调用的服务,则每个服务都可能有会话,直到 UserController 被垃圾回收。
关于如何更好地管理这个的任何想法?我错过了一些明显的东西吗?
编辑
抱歉,如果我不清楚 - 我知道我可以将依赖注入与会话/数据上下文一起使用,但是它会在服务类的生命周期内得到维护。对于任何运行时间较长的操作/方法(例如,假设服务被批处理调用),除了增加可测试性之外,这可能会导致很多打开的会话。