gpt4 book ai didi

c# - 为什么可以不处理 UserStore

转载 作者:行者123 更新时间:2023-11-30 16:05:39 26 4
gpt4 key购买 nike

默认的 MVC 5 + Identity 2.1 项目包含此行(在 Startup.Auth.cs 中):

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的类的实例? ?

最佳答案

我认为这没问题,因为 UserStore 实际上包装了 Entity Framework 的 DbContext 类。虽然 DbContext 也是 Disposablerefer to this blog post处置 DbContext 不是强制性的。另外值得指出的是,处理注入(inject)的对象并不是一个好主意,事实上管理对象的生命周期是注入(inject)者的责任。因此很明显 UserManager 在这种情况下不会处理 UserStore

关于c# - 为什么可以不处理 UserStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225647/

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