扩展 UserManager 导致 ObjectDisposedException

Extending UserManager results in ObjectDisposedException

如果我扩展生成的 aspnetboilerplate UserManager class(从启动模板),每当我使用 RoleManager 时,我都会收到 ObjectDisposedException 异常。我认为这与依赖注入有关。有什么明显的我做错了(或不应该做的)吗?

这是 UserManager class 定义(使用我在底部添加的方法)

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();
}

添加 [UnitOfWork] 属性并使其成为 virtual 方法:

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

参见:UnitOfWork Attribute Restrictions

You can use UnitOfWork attribute for:

  • All public or public virtual methods for classes that are used over an interface (Like an application service used over a service interface).
  • All public virtual methods for self-injected classes (Like MVC Controllers and Web API Controllers).
  • All protected virtual methods.