2009-07-23 19 views
12

Używam Unity do utworzenia instancji nowej klasy w konstruktorze kontrolera i zapisania wtryskiwanej klasy we właściwości wewnątrz kontrolera. Następnie chcę użyć ActionFilter, aby sprawdzić, czy klasa iniekcyjna ma pewne właściwości, które sprawdzam w jego konstruktorze. Czy istnieje sposób użycia ActionFilter do sprawdzenia poprawności właściwości wstrzykniętej klasy?ASP.NET MVC - Dostęp do właściwości kontrolera w ActionFilter

góry dzięki

Odpowiedz

32

Coś takiego ?:

public class ValidateActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var yourController = filterContext.Controller as YourController; 

     if (yourController == null) 
     { 
      throw new InvalidOperationException("It is not YourController !!!"); 
     } 

     // It is YourController - validate here 
     var yourProperty = yourController.YourProperty; 

     // UPDATED *************************** 
     // or test whether controller has property 

     var property = filterContext.Controller.GetType().GetProperty("YourProperty"); 

     if(property == null) 
     { 
      throw new InvalidOperationException("There is no YourProperty !!!"); 
     } 
    } 
} 
+0

dzięki skaffman. Chodzi o to, że filtr będzie w każdym kontrolerze, ale nie wszystkie z nich będą miały zdefiniowaną właściwość. Muszę więc sprawdzić, czy istnieje w bieżącym kontrolerze, a następnie sprawdzić wartość, jeśli:) ... –

+3

Najprostszym sposobem na zrobienie tego byłoby utworzenie interfejsu IContainsYourProperty (z jedną właściwością YourProperty) i kontrolery, które ujawniają tę właściwość implementują interfejs, a następnie filtr może sprawdzić istnienie tego interfejsu na kontrolerze. W przeciwnym razie użyj funkcji Reflection, aby sprawdzić właściwość, ale jest to prawdopodobnie przesada. – Levi

+0

Tak właśnie zrobiłem. Dzięki Levi :) –

Powiązane problemy