2010-07-13 30 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

相關問題