2016-03-29 55 views
1

您好我想在asp.net核心中創建一個自定義的DataAnnotation屬性。以下是我迄今爲止:在ValidationAttribute中訪問IServiceProvider的實例

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 
public class StoreDupplicateAttribute : ValidationAttribute 
{ 
    public StoreDupplicateAttribute(IStoreManager storeManager) 
    { 

    } 

    public override bool IsValid(object value) { 

    } 
} 

我需要在我的代碼IStoreManager.The問題的一個實例是,如果我這樣做,這樣我就需要通過IStoreManager作爲參數,當我使用屬性。

有沒有什麼辦法可以訪問IServiceProvider的實例從我的IStoreManager依賴項獲取而不使用構造器注入?

+0

我不能肯定,但我認爲你可以標註屬性與'[FromServices]'把它直接注入,而不是通過構造。不過,我懷疑這隻適用於控制器(因此爲什麼我不會將它作爲答案發布,我沒有時間自行測試)。值得一試... –

回答

2

我也找不到類似問題的答案,但後來我發現了它。你應該重寫其他虛擬IsValid的方法,像這樣:

public class StoreDupplicateAttribute : ValidationAttribute 
{ 
    public StoreDupplicateAttribute() 
    { 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     IStoreManager storeManager = validationContext.GetService(typeof(IStoreManager)) as IStoreManager; 

     return ValidationResult.Success; 
    } 
}