Расширение UserManager приводит к исключению ObjectDisposedException - PullRequest
0 голосов
/ 13 ноября 2018

Если я расширяю сгенерированный класс UserManager aspnetboilerplate (из шаблона запуска), каждый раз, когда я использую RoleManager, я получаю исключение ObjectDisposedException.Я предполагаю, что это связано с внедрением зависимости.Есть ли что-то очевидное, что я делаю неправильно (или не должен делать)?

Вот определение класса UserManager (с методом, который я добавил внизу)

namespace MyProject.Authorization.Users
{
    public class UserManager : AbpUserManager<Role, User>
    {
        public UserManager(
            RoleManager roleManager,
            UserStore store, 
            IOptions<IdentityOptions> optionsAccessor, 
            IPasswordHasher<User> passwordHasher, 
            IEnumerable<IUserValidator<User>> userValidators, 
            IEnumerable<IPasswordValidator<User>> passwordValidators,
            ILookupNormalizer keyNormalizer, 
            IdentityErrorDescriber errors, 
            IServiceProvider services, 
            ILogger<UserManager<User>> logger, 
            IPermissionManager permissionManager, 
            IUnitOfWorkManager unitOfWorkManager, 
            ICacheManager cacheManager, 
            IRepository<OrganizationUnit, long> organizationUnitRepository, 
            IRepository<UserOrganizationUnit, long> userOrganizationUnitRepository, 
            IOrganizationUnitSettings organizationUnitSettings, 
            ISettingManager settingManager)
            : base(
                roleManager, 
                store, 
                optionsAccessor, 
                passwordHasher, 
                userValidators, 
                passwordValidators, 
                keyNormalizer, 
                errors, 
                services, 
                logger, 
                permissionManager, 
                unitOfWorkManager, 
                cacheManager,
                organizationUnitRepository, 
                userOrganizationUnitRepository, 
                organizationUnitSettings, 
                settingManager)
        {
        }

        public void GoBoom()
        {
            var role = RoleManager.Roles.FirstOrDefault();
        }
    }
}

Использование (здесь, напрямую вводится и используется в виде бритвы)

@inject MyProject.Authorization.Users.UserManager _userManager
@{
    _userManager.GoBoom();
}

1 Ответ

0 голосов
/ 14 ноября 2018

Добавьте [UnitOfWork] атрибут и сделайте его virtual методом:

[UnitOfWork]
public virtual void GoBoom()
{
    ...
}

См .: Ограничения атрибута UnitOfWork

Вы можете использовать UnitOfWorkатрибут для:

  • Все публичные или публичные виртуальные методы для классов, которые используются через интерфейс (как служба приложения, используемая через интерфейс службы).
  • Все общедоступные виртуальные методы для самоинъекционных классов (например, Контроллеры MVC и Веб-контроллеры API ).
  • Все защищенные виртуальные методы.
...