默认MVC 5 +身份2.1项目包含这条线(在Startup.Auth.cs):为什么OK不要丢弃一个UserStore
app.CreatePerOwinContext<ApplicationUserManager>ApplicationUserManager.Create);
...其中定义静态Create
方法(在IdentityConfig.cs)如下:
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
...
}
注意如何在新UserStore<ApplicationUser>
创建那里,并传递给ApplicationUserManager
构造。另请注意,UserStore<T>
是一次性的(基类实现IDisposable
)。
这让我觉得很奇怪,因为我想知道是谁负责处理新创建的UserStore
。我预计ApplicationUserManager
(或它的基类)必须在处置它时处置它。但是,不:我看着源头,似乎不是。所以没有人处置该实例!
这是为什么?你什么时候不是想要处理一个实现IDisposable
的类的实例?
你看过那篇文章的评论吗?他们概述了在上下文中调用Dispose的一些非常好的理由,即使它不是绝对必要的。 –
我并不认为ApplicationUserManager应该负责处理上下文 - 这不是我想看到的行为。但是,框架中有类似这样的类。 –
当然放置一次性物体是一个好主意。我试图说,在这种情况下,处理'DbContext'不是必需的,你可以忽略它。就像他们在这个例子中所做的一样。顺便说一下,如果你真的想把'UserStore'简单地放在'Owin'上下文中并在Create方法中检索它。 Owin的上下文管理器会处理它。 –