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