2010-07-13 54 views
1

动作过滤器可以访问控制器中的私人对象吗?

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

我想一个行为过滤器添加到该基金的方法:

public class FundController 
{ 
    private Site _site; 

    [MyFilter] 
    public ViewResult Fund() 
    { 
    } 
} 

但行动滤波器需要_site访问。这可能吗?如果是这样,怎么样?

回答

6

将该字段暴露在公共属性中,然后将过滤器中的控制器投射到FundController

例如:

FundController controller = (FundController)filterContext.Controller; 

Site site = controller.Site; 
+3

这将更好地工作,如果你使用属性的接口。 例如,ISiteController。 而不是转换为具体的类型,您的过滤器可以转换为接口类型。这将允许您在其他控制器上重新使用过滤器。 – 2010-07-13 18:43:46

+0

@Chris:使用ActionFilter的依赖注入会更好。 – SLaks 2010-07-13 19:02:42

-1

你也设置了需要的参数你ActionFilter你然后通过在网站

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

这不能工作。属性参数必须是编译时常量。 – SLaks 2010-07-13 17:18:58

相关问题