2015-08-08 7 views
2

У меня есть пользовательский атрибут в asp.net mvc и используйте структурную карту. Как я могу вставить ContextDB в пользовательский атрибут ValidationAttribute?Asp.Net MVC Custom Validation Attribute With 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 is null. Что мне делать?

Спасибо.

ответ

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.