使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法
Check for service registration using IsRegistered(), or use the ResolveOptional() method
The requested service 'Volo.Abp.PermissionManagement.PermissionManagementProvider' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
namespace SecurityDomainModule
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(SecurityDomainSharedModule),
typeof(AbpUsersDomainModule),
typeof(AbpUsersDomainSharedModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementDomainModule),
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpPermissionManagementDomainIdentityModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule)
)]
public class SecurityDomainModule : AbpModule
{
public SecurityDomainModule()
{
}
public override void PreConfigureServices(ServiceConfigurationContext context)
{
// ...
AutoAddPermissionManagementProviders(context.Services);
// ...
}
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>();
//options.ManagementProviders.Add<RolePermissionManagementProvider>();
// Role and User providers are already added by default. So not adding them here.
});
}
// ...
}
}
为了重现该错误,我正在尝试以下测试用例:
public async Task<List<PermissionWithGrantedProviders>> GetAllForRoleAsync(string roleName)
{
try
{
Check.NotNullOrEmpty(roleName, nameof(roleName));
var result = await RolePermissionManagerExtensions.GetAllForRoleAsync(_permissionManager, roleName);
return result;
}
catch (Exception ex)
{
//TODO log exception return null;
}
}
正在调用 RolePermissionManagerExtensions
方法,但出现错误,提示 PermissionManagementProvider
未注册。
PermissionManagementProvider
是 abstract
class,所以不要将其添加到 options.ManagementProviders
。
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>(); // Remove this
// ...
});
}
The requested service 'Volo.Abp.PermissionManagement.PermissionManagementProvider' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
namespace SecurityDomainModule
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(SecurityDomainSharedModule),
typeof(AbpUsersDomainModule),
typeof(AbpUsersDomainSharedModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementDomainModule),
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpPermissionManagementDomainIdentityModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule)
)]
public class SecurityDomainModule : AbpModule
{
public SecurityDomainModule()
{
}
public override void PreConfigureServices(ServiceConfigurationContext context)
{
// ...
AutoAddPermissionManagementProviders(context.Services);
// ...
}
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>();
//options.ManagementProviders.Add<RolePermissionManagementProvider>();
// Role and User providers are already added by default. So not adding them here.
});
}
// ...
}
}
为了重现该错误,我正在尝试以下测试用例:
public async Task<List<PermissionWithGrantedProviders>> GetAllForRoleAsync(string roleName)
{
try
{
Check.NotNullOrEmpty(roleName, nameof(roleName));
var result = await RolePermissionManagerExtensions.GetAllForRoleAsync(_permissionManager, roleName);
return result;
}
catch (Exception ex)
{
//TODO log exception return null;
}
}
正在调用 RolePermissionManagerExtensions
方法,但出现错误,提示 PermissionManagementProvider
未注册。
PermissionManagementProvider
是 abstract
class,所以不要将其添加到 options.ManagementProviders
。
private static void AutoAddPermissionManagementProviders(IServiceCollection services)
{
services.Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<BusinessSegmentPermissionManagementProvider>();
options.ManagementProviders.Add<CustomPartnerPermissionmanagementProvider>();
options.ManagementProviders.Add<CustomTeamPermissionmanagementProvider>();
options.ManagementProviders.Add<PermissionManagementProvider>(); // Remove this
// ...
});
}