【发布时间】:2018-08-02 23:42:55
【问题描述】:
我使用 ASP.NET Identity 已经有一段时间了,我一直在关注教程和网站,这些教程和网站总是说要使用以下代码在我的方法中创建 UserManager:
var userManager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>()
一切正常,直到有一天,我注意到 UserManager 实现了 IDisposable。为了确保我打开的所有东西都能正常关闭,我在所有这些实例中添加了using,突然一切都停止了工作。我开始收到“无法访问已处置的对象”。到处都是错误。根据我的研究,显然有些实例已被关闭,而其他实例仍在使用中。
奇怪的是,当我在网上搜索时,几乎没有关于是否应该关闭或处置 UserManager 或任何其他 Manager(即 SignInManager、RoleManager)的信息。
那么,对此有何共识?这些经理是否应该被关闭/处置?如果不是,那么如果不在方法中,我们应该在哪里声明它们?我读过它们不应该是静态的。
【问题讨论】:
-
上面的代码很可能返回一个可重用的实例。如果你处理掉它,那么你就破坏了该方法的实现。
-
好吧,我认为我必须在每个方法上都实例化它,所以我使用了“使用”,只有在我完成代码后才关闭它。当同样使用 UserManager 的父母版页突然没有一个父母版页时发生错误,因为“使用”关闭了其子页中的所有实例。但是阅读下面的内容,我想我找到了答案。
-
您不是在“实例化” - 您正在使用现有实例(或延迟加载的实例)。仅当您使用
new关键字时才会发生实例化。 -
知道了。谢谢!
标签: c# asp.net asp.net-identity