有没有办法将依赖注入与IDisposable结合起来?

时间:2017-07-10 13:25:38

标签: .net entity-framework unit-testing dependency-injection constructor-injection

当我意识到在某些情况下编写不同的代码时,一位同事和我正在讨论单元测试......

如果我自己使用实体框架,我倾向于通过IDisposable块使用using界面:

using (Context ctx = new Context()) { whatever(); }

但是当我编写将进行单元测试的代码时,我将上下文的实例化移动到构造函数中,以便我可以传入模拟来代替。我知道这是一种依赖注入,特别是#34;构造函数注入"。

只是粗略地看一下,我在几篇文章中看到了后一种模式:

这个问题(正如我的同事和我所反映的)是从未调用过dispose方法。我想这些对象在超出范围时会最终确定,但似乎不太理想。

所以,我的问题:有没有办法将依赖注入与IDisposable的使用结合起来?

我可以想象三种可能的答案类别:

  1. "是的,有办法,这里有......"
  2. "不,没有办法。这是你必须忍受的。"
  3. "汤姆,你完全误解了一些东西。"
  4. 无论是哪种,我们都非常感激!

1 个答案:

答案 0 :(得分:2)

  

后者。我们只使用DI来注入模拟数据库上下文,因此我们不会使用完整的DI容器。

你是对的,DbContext实例永远不会Dispose调用它(假设你没有在你的某个方法中手动调用dispose )。我建议你选择一个好的DI框架(我的个人收藏是AutoFac)。该框架将处理处理实现IDisposable的任何内容,在框架中注册,并由框架注入/提供。