.net核心DI注入为BuildServiceProvide提供了重复的单例服务



我想为BuildServiceProvider方法删除重复的单例服务。我知道我应该使用现有的DI服务,但我无法访问GetService方法。我是DI的新手,如果有人能告诉我如何在不获得新服务的情况下访问GetService方法,我将不胜感激。下面的代码。谢谢

消息:从应用程序代码调用"BuildServiceProvider"会导致创建一个附加的单例服务副本。考虑将依赖注入服务等替代方案作为"配置"的参数。

public void ConfigureServices(IServiceCollection services){
services.AddAuthorization(options =>
{
var sp = services.BuildServiceProvider();//CODE ISSUE HERE
var permissionService = sp.GetService<IPermissionService>();
if (permissionService != null)
{
foreach (var permission in permissionService.GetPrivilegePermissions().Select(x => x.Name)
.Distinct())
{
options.AddPolicy(permission, policy => policy.Requirements.Add(new 
PermissionRequirement(permission)));
}
}
});

}
您已经编写了一个lambda方法来配置对象。但是,由于所有Microsoft服务都遵循选项模式,因此您可以编写一个服务来配置它。注入您想要的任何其他服务。您可以为任何选项类型实现任意数量的IConfigureOptions<T>服务。
public class ConfigureAuthorization : IConfigureOptions<AuthorizationOptions>{
public ConfigureAuthorization( ... ){}
public void Configure(AuthorizationOptions options){
// ...
}
}
services.AddAuthorization();
services.AddSingleton<IConfigureOptions<AuthorizationOptions>, ConfigureAuthorization>();

注意,注意任何潜在的范围界定问题。

最新更新