我试图使用"使用"最小化实体框架连接上下文范围,而在平均时间我希望能够将一个上下文注入我的类.我在互联网上搜索但是没有找到像我这样的情况,或者我只是做错了什么,无论如何,这里是代码:
[TestFixture]
public class Dummy
{
private IFoo ifoo;
[Test]
public void CreateIfNotExist()
{
using (var foo = GetNewIFoo())
{
foo.Dosomething();
}
Assert.IsNull(ifoo);//test fail here
}
[Test]
public void NotCreateIfExist()
{
ifoo = new Bar();
using (var foo = GetNewIFoo())
{
foo.Dosomething();
}
Assert.IsNull(ifoo);//test fail here
}
private IFoo GetNewIFoo()
{
if (ifoo == null)
{
ifoo = new Foo();//return new Foo();
}
return ifoo;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个测试失败,创建了foo的对象序列 - > foo做某事 - > foo处置(使用on foo调用),而状态变量ifoo仍然是Foo()的类型.
第二次测试失败,对象生命序列与之前相同.
我很困惑因为我认为GetNewIFoo()会返回ifoo的引用而使用关键字只会在ifoo上调用dispose?
另外,有没有什么好方法可以控制上下文范围,同时保持注入IContext的能力?
调用Dispose() 不会清除引用(也不执行垃圾回收).它只是调用Dispose()方法,它可以(例如)关闭连接,文件等 - 具体取决于实现.对象可以是非null并且仍然处理.某些对象允许您查看对象是否被处置; 大部分都没有.
一般来说,如果你是using某种东西,你就不会在其他地方写出那个变量(也就是说你不会把它写成某个地方的某个字段).