没有在 Model Binder Provider 中注入我的服务
Not getting my service injected in Model Binder Provider
有什么原因导致我没有将服务注入到我的自定义 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 class 中时,我看到 PasswordHasher 服务的值为空。但是,我在插入RegisterBinderProvider之前检查了已经注入的服务,我可以在其中找到PasswordHasher。
如果您需要,这是我的自定义 BinderProvider:
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
方法,因此尝试解决一个问题没有多大意义启动时的作用域服务。
有什么原因导致我没有将服务注入到我的自定义 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 class 中时,我看到 PasswordHasher 服务的值为空。但是,我在插入RegisterBinderProvider之前检查了已经注入的服务,我可以在其中找到PasswordHasher。
如果您需要,这是我的自定义 BinderProvider:
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
方法,因此尝试解决一个问题没有多大意义启动时的作用域服务。