我正在尝试了解vNext。
我编写了与MongoDB一起使用并实现以下接口(interface)的自定义UserStore:

  public class UserStore : IUserStore<ApplicationUser>, IUserPasswordStore<ApplicationUser>, IUserSecurityStampStore<ApplicationUser>,
    IUserLoginStore<ApplicationUser>, IUserClaimStore<ApplicationUser>, IUserEmailStore<ApplicationUser>, IUserRoleStore<ApplicationUser>,
    IUserTwoFactorStore<ApplicationUser>

在Startup.cs中添加:
app.UseServices(services =>
        {

            services.AddIdentity<ApplicationUser>()
                .AddUserStore(() => { return new UserStore(); })
                .AddUserManager<UserManager<ApplicationUser>>()
                .AddHttpSignIn();

            services.AddMvc();
        });

然后尝试使用Visual Studio模板中未更改的AccountController并遇到麻烦。
登录时,我在UserStore.FindByNameAsync()中得到ObjectDisposedException -称为UserStore.Dispose()的东西。
在github.com/aspnet上的UserManager代码中,Store.Dispose()仅在UserManager.Dispose()中调用。
我可以忽略Dispose的调用,并且一切正常,但这不是一个好方法。

所以我不知道该怎么办

P.S.问题是:什么(以及为什么)可以调用UserStore.Dispose()?

最佳答案

在vNext中,DI是内置的,并管理身份服务的生命周期。您可能在尝试处置服务后尝试使用身份,默认情况下,身份服务的生存期范围是一个请求,因此,例如,如果您尝试挂接到对用户管理器的引用并在多个请求中重用它,那会导致ObjectDisposedException。

关于asp.net-mvc - vNext。 AspNet.Identity和自定义UserStore。 UserStore处理的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25575795/

10-11 04:08