当我意识到在某些情况下编写不同的代码时,一位同事和我正在讨论单元测试......
如果我自己使用实体框架,我倾向于通过IDisposable
块使用using
界面:
using (Context ctx = new Context()) { whatever(); }
但是当我编写将进行单元测试的代码时,我将上下文的实例化移动到构造函数中,以便我可以传入模拟来代替。我知道这是一种依赖注入,特别是#34;构造函数注入"。
只是粗略地看一下,我在几篇文章中看到了后一种模式:
这个问题(正如我的同事和我所反映的)是从未调用过dispose方法。我想这些对象在超出范围时会最终确定,但似乎不太理想。
所以,我的问题:有没有办法将依赖注入与IDisposable的使用结合起来?
我可以想象三种可能的答案类别:
无论是哪种,我们都非常感激!
答案 0 :(得分:2)
后者。我们只使用DI来注入模拟数据库上下文,因此我们不会使用完整的DI容器。
你是对的,DbContext
实例永远不会Dispose
调用它(假设你没有在你的某个方法中手动调用dispose )。我建议你选择一个好的DI框架(我的个人收藏是AutoFac)。该框架将处理处理实现IDisposable
的任何内容,在框架中注册,并由框架注入/提供。