我想在下面的代码中处理devDB
上下文对象。
private static void InitContainer()
{
var devDB = new TestContext(constr);
Container
.RegisterInstance<TestContext>(devDB)
.RegisterInstance<IRepository<User>>(new Repository<User>(devDB))
}
private static void CleanUp()
{
if (Container != null)
{
Container.Dispose();
}
}
我尝试了using
语句,但是我收到以下错误:
ObjectContext实例已被释放,不能再用于需要连接的操作。
如何正确处理devDB
?
编辑:
using (var devDB = new TestContext(constr))
{
var peopleService = new Peoplews();
Container
.RegisterInstance<TestContext>(devDB)
.RegisterInstance<IRepository<User>>(new Repository<User>(devDB))
.RegisterInstance<IRepository<Role>>(new Repository<Role>(devDB))
.RegisterInstance<IRepository<Profile>>(new Repository<Profile>(devDB))
.RegisterInstance<IRepository<Application>>(new Repository<Application>(devDB))
}
答案 0 :(得分:1)
using(var devDB = new TestContext(constr))
{
// rest of your code
}
如果变量是Dispose
Disposable.
答案 1 :(得分:1)
您可以使用using
语句块隐式调用dispose方法
private static void InitContainer()
{
using(var devDB = new TestContext(constr))_
{
Container
.RegisterInstance<TestContext>(devDB)
.RegisterInstance<IRepository<User>>(new Repository<User>(devDB))
}
}
using语句确保即使调用Dispose也会调用 在对象上调用方法时发生异常。您可以 通过将对象放在try块中来实现相同的结果 然后在finally块中调用Dispose;其实这是怎么回事 using语句由编译器翻译。代码示例 之前在编译时扩展为以下代码(请注意额外的 花括号来创建对象的有限范围),MSDN
使用块将转换为try finally block,如下所示。另请注意,您在处理后无法访问上下文。
{
TestContext devDB = new TestContext("Arial", 10.0f);
try
{
devDB = new TestContext(constr);
Container
.RegisterInstance<TestContext>(devDB)
.RegisterInstance<IRepository<User>>(new Repository<User>(devDB))
}
finally
{
if (devDB != null)
((IDisposable)devDB).Dispose();
}
}
您所遇到的代码未显示在该功能旁边使用context
的任何迹象,您可以返回数据而不是查询方法,以便不再需要上下文。