Asp.net core 访问ValidationAttribute中的IServiceProvider实例
您好,我正在尝试在asp.net core中创建自定义DataAnnotation属性。以下是我到目前为止的情况:Asp.net core 访问ValidationAttribute中的IServiceProvider实例,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,您好,我正在尝试在asp.net core中创建自定义DataAnnotation属性。以下是我到目前为止的情况: [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] public class StoreDupplicateAttribute : ValidationAttribute { pu
[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依赖关系?我也找不到类似问题的答案,但后来我找到了答案。您应该重写其他虚拟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;
}
}
我不确定,但我认为您可以使用
[FromServices]
对属性进行注释,直接将其注入,而不是通过构造函数。然而,我怀疑这只适用于控制器(因此我不将其作为答案发布,因为我自己没有时间测试它)。值得一试。。。