有什么原因为什么我没有将注入的服务放入我的自定义 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
的单个实例并调用一次AddMvc
和ModelBinderProviders.Insert
方法,因此尝试在启动时解析作用域服务没有多大意义。