2016-09-21 184 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 
}