2015-08-08 59 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概念。