在ValidationAttribute中访问IServiceProvider的实例

时间:2016-03-29 10:13:37

标签: asp.net-core asp.net-core-mvc

您好我正在尝试在asp.net核心中创建自定义DataAnnotation属性。以下是我到目前为止的情况:

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

    }

    public override bool IsValid(object value) {

    }
}

我将在我的代码中需要一个IStoreManager实例。问题是,如果我这样做,我需要在使用属性时将IStoreManager作为参数传递。

有没有办法访问IServiceProvider的实例,以便在不使用构造函数注入的情况下从中获取我的IStoreManager依赖项?

1 个答案:

答案 0 :(得分: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;
    }
}