2016-09-21 116 views
1

我在Asp.Net Core Web Api中构建了自定义验证属性。我需要访问我的验证器中的IDataProtector以及我用来访问数据库的另一个服务。我已经搜索过,并没有找到任何文档。 ActionFilters可以选择使用ServiceFilter,但似乎没有任何选项用于验证属性。有任何想法吗?将验证属性注入验证属性Web Api Asp.Net Core

+0

你不应该依赖注入的属性表达[这里](https://stackoverflow.com/a/ 29916075/264697),[这里](http://blog.ploeh.dk/2014/06/13/passive-attributes/)和[这里](https://www.cuttingedge.it/blogs/steven/pivot /entry.php?id=97)。 – Steven

回答

1

由于验证属性通常在属性上定义,因此它们无法通过构造函数接收引用。最好如果你真的深入模型绑定,可能有些东西需要自定义以允许属性注入,但实际上我只是在Validate方法中获得对依赖项解析器的引用,并调用适当的方法。

0

使用ValidationContext的GetService()方法来获取数据库。 即

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    MyDbContext db = (MyDbContext) validationContext.GetService(typeof(MyDbContext)); 
    //... 
} 
0

您可以覆盖IsValid的方法和使用validationContext解决依赖性:

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    var service = (IExternalService) validationContext.GetService(typeof(IExternalService)); 
    // use service 
}