Asp.Net 带有 StructureMap 的 MVC 自定义验证属性

Asp.Net MVC Custom Validation Attribute With StructureMap

我在 asp.net mvc 中有一个自定义属性并使用结构图。 如何将 ContextDB 注入自定义 ValidationAttribute?

[AttributeUsage(AttributeTargets.Property)]
public class CustomValidationAttribute : ValidationAttribute
{
    public ContextDB _Context { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        Settings settings = new Settings(_Context);

        // Checking...

        return ValidationResult.Success;
    }
}

我的代码不起作用,_Context 为空。 我该怎么办?

谢谢。

如果您已将 DI 注册到 MVC,则可以在任何地方使用 MVC 的依赖项解析器。

public class CustomValidationAttribute : ValidationAttribute
{
     private ContextDB _context { get; set; }

     public CustomValidationAttribute()
     {
         // assuming you have a IContextDB interface which mapped to 
         // ContextDB in your StructureMap
          _context =DependencyResolver.Current.GetService<IContextDB>();
     }
     // rest of your code
}

有关更高级的场景,请参阅 Setter 注入概念。