gpt4 book ai didi

c# - 如何将基于 'using' 的 GC 生命周期打开为基于 'create-dispose' 的生命周期?

转载 作者:行者123 更新时间:2023-11-30 22:29:29 25 4
gpt4 key购买 nike

我特别提到了 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() 并以相反的顺序处理它们。

当然,调用代码(业务层)应该将 using(){} 模式应用于 Repository 实例。

附加:

嵌套用法应该不重要。 Impersonate() 是影响当前线程的状态更改。 using-implied Dispose() 将调用 Undo()。

关于c# - 如何将基于 'using' 的 GC 生命周期打开为基于 'create-dispose' 的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com