ABP调用RolePermissionManagerExtensions提示PermissionManagementProvider未注册如何解决
请求的服务 'Volo.Abp.PermissionManagement.PermissionManagementProvider' 未注册。若要避免此异常,请注册提供该服务的组件,使用 IsRegistered() 方法检查服务注册状态,或使用 ResolveOptional() 方法解析可选依赖项。

排查解决方法
核心根因
PermissionManagementProvider是所有权限提供器的抽象基类,本身不会被ABP框架注册为可直接解析的服务。你在配置PermissionManagementOptions时将这个抽象类加入了ManagementProviders列表,框架尝试实例化列表中的所有提供器时,无法解析抽象类就会抛出当前错误。
具体解决步骤
- 移除无效配置:删除
AutoAddPermissionManagementProviders方法中options.ManagementProviders.Add<PermissionManagementProvider>();这一行代码,这个基类不需要手动添加到提供器列表中。 - 校验自定义提供器配置:
- 确认三个自定义提供器
BusinessSegmentPermissionManagementProvider、CustomPartnerPermissionmanagementProvider、CustomTeamPermissionmanagementProvider均继承自PermissionManagementProvider抽象基类 - 检查自定义提供器拼写是否和类定义完全一致,当前代码里的
Permissionmanagement部分首字母m为小写,注意和类名的大小写匹配 - 确保自定义提供器已经注册到DI容器,可以给类标注
[Dependency(ServiceLifetime.Transient)]特性,或者在ConfigureServices方法中手动注册:
services.AddTransient<BusinessSegmentPermissionManagementProvider>(); - 确认三个自定义提供器
- 验证服务注册状态:如果修改后仍报错,可以在模块的
ConfigureServices方法中加入以下代码验证自定义提供器的注册状态:
public override void ConfigureServices(ServiceConfigurationContext context) { // 替换为你要校验的自定义提供器类型 var providerRegistered = context.Services.Any(s => s.ServiceType == typeof(BusinessSegmentPermissionManagementProvider) ); // 可输出providerRegistered的值判断注册是否成功 }
内容的提问来源于stack exchange,提问作者Siva Kumar
相关产品推荐
相关产品推荐

