我需要使用其他注册服务来验证对数据库的字段。我一直在阅读documentation,但还没有找到真正的答案。
远程验证调用控制器方法,但它只是客户端,因此禁用JS会禁用验证。还有使用验证属性的自定义验证,并且很好地包含在ModelState.IsValid
中,但是我不能将依赖项注入到它的构造函数中。
我发现this question标记为已回答,因为它说的是依赖性解析程序,但我找不到任何有用的信息。
我试过研究它,但我遇到的只是依赖注射或IServiceProvider
这对我不起作用。以下是我失败的一些尝试:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//--1-------------------------------
var container = new ServiceContainer();
var _context = container.GetService<ApplicationDbContext>();
//----------------------------------
//--2-------------------------------
var services = new ServiceCollection();
IServiceProvider servicesProvider = services.BuildServiceProvider();
var _context = servicesProvider.GetService<ApplicationDbContext>();
//----------------------------------
return ValidationResult.Success;
}
每个检索到的 _context 都为null。我在这里已经筋疲力尽了所有的想法,我将不胜感激任何帮助。
答案 0 :(得分:1)
我面临类似的问题。我尝试了一些&#34;斑驳的&#34;方式(以防你&#34;必须&#34;)。就像我遇到了电子邮件的DuplicateMatch属性一样 - 这需要数据库访问,我的自定义validationAttribute中没有任何内容。
如果有任何帮助,请告诉我。而且我有兴趣从社区中了解更多关于不违反DI模式的方法(例如3.)。