没有在模型绑定程序提供程序中注入我的服务



有什么原因为什么我没有将注入的服务放入我的自定义 RegisterBinderProvider 中?

services.AddScoped<IPasswordHasher, PasswordHasher>();
services.AddMvc(options =>
{
RegisterBinderProvider registerBinderProvider = 
DependencyResolver.Current.GetService<RegisterBinderProvider>();
options.ModelBinderProviders.Insert(0, registerBinderProvider);
options.Filters.Add(typeof(ApiExceptionFilter));
});

在此代码之后,当我在 RegisterBinderProvider 类中时,我看到 PasswordHasher 服务的值为 null。但是,在插入RegisterBinderProvider之前,我检查了已经注入的服务,我可以在其中找到PasswordHaser。

如果你需要它,这是我的自定义绑定提供程序:

public class RegisterBinderProvider : IModelBinderProvider
{
private readonly IPasswordHasher _passwordHasher;
public RegisterBinderProvider(IPasswordHasher passwordHasher)
{
_passwordHasher = passwordHasher;
}
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context.Metadata.ModelType == typeof(User))
{
return new RegisterBinder(_passwordHasher);
}
return null;
}
}

我希望我提供了足够的信息来了解我的问题,谢谢!

您可以使用context参数在GetBinder方法中重新使用服务:

public IModelBinder GetBinder(ModelBinderProviderContext context)
{
var service = context.Services.GetRequiredService<IPasswordHasher>();
if (context.Metadata.ModelType == typeof(User))
...
}

由于只创建RegisterBinderProvider的单个实例并调用一次AddMvcModelBinderProviders.Insert方法,因此尝试在启动时解析作用域服务没有多大意义。

相关内容

  • 没有找到相关文章

最新更新