如何实现这样的自定义验证方法,这些方法需要访问使用clean/onion架构构建的应用程序中实体上的数据库?
似乎由于实体位于最内层,因此无法使用最外层的DbContext
,但我可能误解了某些内容。
一种选择是从 ValidationContexts GetService(Type serviceType( 方法解析 DbContext,该方法将从 IoC IServiceProvider 获取服务
像这样尝试:
var yourDbContext = (DbContext)validationContext.GetService(typeof(DbContext));
从干净的 arcitecture 的角度来看,您应该将验证的逻辑放在使用 DbContext 或其抽象的验证服务中。然后,您只需将验证服务实现的接口注入到验证属性中。
var yourValidationService = (IValidator)validationContext.GetService(typeof(IValidator));