如果我扩展生成的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();
}
答案 0 :(得分:1)
添加[UnitOfWork]
属性并将其设置为virtual
方法:
[UnitOfWork]
public virtual void GoBoom()
{
...
}
请参阅:UnitOfWork Attribute Restrictions
您可以将UnitOfWork属性用于:
- 用于在接口上使用的类的所有 public 或 public虚拟方法(就像在服务接口上使用的应用程序服务一样)。
- 用于自注入类的所有公共虚拟方法(例如 MVC控制器和 Web API控制器)。
- 所有受保护的虚拟方法。