2010-07-13 20 views
1

J'aiUn filtre d'action peut-il accéder à un objet privé dans le contrôleur?

public class FundController 
{ 
    private Site _site; 
    public ViewResult Fund() 
    { 
    } 
} 

Je voudrais ajouter un filtre d'action à cette méthode du fonds:

public class FundController 
{ 
    private Site _site; 

    [MyFilter] 
    public ViewResult Fund() 
    { 
    } 
} 

mais le filtre d'action doit avoir accès à _site. Est-ce possible? Si c'est le cas, comment?

Répondre

6

Expose le champ dans une propriété publique, puis place le contrôleur dans le filtre sur FundController.

Par exemple:

FundController controller = (FundController)filterContext.Controller; 

Site site = controller.Site; 
+3

Cela fonctionnerait mieux si vous avez utilisé une interface pour la propriété. E.g., ISiteController. Au lieu de couler sur le type de béton, votre filtre peut utiliser le type d'interface. Cela vous permettra de réutiliser le filtre sur d'autres contrôleurs. –

+0

@Chris: Cela fonctionnerait mieux avec l'injection de dépendance pour le filtre ActionFilter. – SLaks

-1

Vous pouvez également configurer votre ActionFilter avec un paramètre obligatoire que vous passez ensuite dans le site

[MyFilter(_site)] 
public ViewResult Fund() { 
} 
+2

Cela ne peut pas fonctionner. Les paramètres d'attribut doivent être des constantes de compilation. – SLaks