aspnetboilerplate - 扩展 UserManager 导致 ObjectDisposedException
问题描述
如果我扩展生成的 aspnetboilerplate UserManager 类(从启动模板),任何时候我使用 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();
}
解决方案
添加[UnitOfWork]
属性并使其成为virtual
方法:
[UnitOfWork]
public virtual void GoBoom()
{
...
}
请参阅:UnitOfWork 属性限制
您可以将 UnitOfWork 属性用于:
- 通过接口使用的类的所有公共或公共虚拟方法(如通过服务接口使用的应用程序服务)。
- 自注入类的所有公共虚拟方法(如MVC 控制器和Web API 控制器)。
- 所有受保护的虚方法。
推荐阅读
- typescript - 多级索引类型打字稿
- matlab - 在 Matlab 中向 OFDMA 系统添加噪声
- javascript - Ag grid node.setSelected(true) 不在 UI 上显示选中的复选框
- swift - Xcode 11:iOS 13 在单元测试时特别不再触发`viewDidAppear`
- vim - Vim + elm-vim 无法识别 .elm 文件
- javascript - 如何在 React js 中为我的数组中的项目分配一个键?
- amazon-web-services - 同一区域内的 AWS 数据传输成本,但属于不同的账户?
- firebase - Firestore 使用 .hasAny() 规则限制字段
- c# - 如何通过 REST API 获取 Azure DevOps 组织的所有者?
- emacs - 如何查看红色波浪状错误标记表示的内容