我特指 Impersonating user with Entity Framework 已接受的答案,其中包含以下代码:
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
using (var dbContext = new MyEntityFrameworkContainer())
{
...
}
我宁愿仅在存储库中的一个位置实例化dbContext
,它实现IDisposable
,然后在处置实体时处置上下文。我不确定上面的两个 using
范围如何相互影响,那么如何在避免使用 block 的同时实现此代码在模拟方面的作用?
添加:
正如下面的答案所建议的,我可以简单地使用局部变量并“手动”确保资源被处置,但我在这里关心的是内部 using
中的实例化是否以任何方式受到外部 使用
。如果这只是生命周期的问题,并且外部 using
没有建立任何上下文或影响内部的任何内容,那么下面的答案已经回答了我的问题。
最佳答案
您可以将它们声明为 2 个私有(private)字段并在构造函数中实例化它们。
然后实现Dispose()并以相反的顺序Dispose它们。
当然,调用代码(业务层)应该将 using(){}
模式应用于存储库实例。
附加:
嵌套使用应该不重要。 Impersonate()
是影响当前线程的状态更改。使用隐含的 Dispose() 将调用 Undo()。
关于c# - 如何将基于 'using' 的 GC 生命周期打开为基于 'create-dispose' 的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199809/