默认的MVC 5 + Identity 2.1 项目包含这条语句(在 Startup.Auth.cs 文件中):
请看这段代码,注意新的
这让我感到奇怪,因为我想知道谁负责处理那个新创建的
这为什么可以呢?在什么情况下你会不想处理实现
app.CreatePerOwinContext<ApplicationUserManager>ApplicationUserManager.Create);
在IdentityConfig.cs中定义了静态Create
方法,如下所示:
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
的类的实例?
ApplicationUserManager
应该负责处理上下文的释放 - 那不是我想看到的行为。然而,框架中有一些类的行为就是这样的。 - Gary McGillDbContext
不是必要的,你可以省略它。就像他们在这个例子中所做的那样。顺便说一句,如果你真的想处理UserStore
,只需将其放入Owin
上下文中,并在 Create 方法中检索它。Owin
上下文管理器会处理它。 - Sam FarajpourGhamari