5

Я пытаюсь понять vNext.
Я написал пользовательские UserStore, который работает с MongoDB и реализует эти интерфейсы:
vNext. AspNet.Identity и пользовательский 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(); 
     }); 

Тогда пытались использовать без изменений AccountController из шаблона Visual Studio и есть проблемы ,
При входе я получаю ObjectDisposedException в UserStore.FindByNameAsync() - что-то называется UserStore.Dispose().
В коде UserManager на github.com/aspnet Store.Dispose() вызывается только в UserManager.Dispose().
Я могу просто игнорировать вызовы Dispose и все работает нормально, но это нехорошо.
Так у меня нет идей, что мне делать

P.S. Вопрос: что (и почему) может вызвать UserStore.Dispose()?

ответ

1

В vNext DI построен и управляет временем службы идентификации. Вероятно, вы пытаетесь использовать личность после того, как службы были удалены, службы идентификации по умолчанию имеют срок службы, привязанный к запросу, поэтому, например, вы пытаетесь вставить ссылку на пользовательский менеджер и повторно использовать ее для нескольких запросов, что приведет к ObjectDisposedException.

+0

UserManager Я получил от параметров конструктора AccountController (UserManager, SignInManager). –

Смежные вопросы