2015-08-08 80 views
2

我在asp.net mvc中有一个自定义属性并使用结构图。 我该如何将ContextDB注入到自定义的ValidationAttribute中?Asp.Net MVC自定义验证属性与StructureMap

[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为空。 我该怎么办?

谢谢。

回答

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概念。