使用StructureMap的Asp.Net MVC自定义验证属性

时间:2015-08-08 16:03:14

标签: asp.net asp.net-mvc 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为null。 我该怎么办?

感谢。

1 个答案:

答案 0 :(得分:4)

如果您已将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 Injection概念。