我有一個自定義的授權類,從FilterAttribute繼承並實現IAuthorizationFilter。我正在使用最新版本的Ninject w/asp.net MVC 3支持。自定義授權MVC 3和Ninject IoC
我遇到的問題是我使用構造函數注入來注入存儲庫。但在OnAuthorization被調用時,存儲庫爲空。下面是代碼...
public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
private readonly IMyRepo _MyRepo;
public MyAuthorizeAttribute() { }
public MyAuthorizeAttribute(IMyRepo myRepo)
{
_MyRepo= myRepo; //this gets initialized
}
public void OnAuthorization(AuthorizationContext filterContext)
{
_MyRepo.DoStuff(); //<< Null, wtf
}
}
濾膜結合:
Bind<IMyRepo>().To<MyRepo>().InRequestScope();
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Controller, null).WhenControllerHas<MyAuthorizeAttribute >();
更新: 有一件事我注意到的是此過濾器是在控制器級別。我在行動範圍內有其他過濾器,似乎可以正常工作......這可能是原因嗎?
更新2: 我已經證實,如果我改變過濾範圍的行動,那麼庫也OnAuthorization(NOT NULL)。
這工作如下,但我需要在控制器範圍,而不是行動。
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Action, null).WhenActionMethodHas<MyAuthorizeAttribute >();
它看起來像你的MyAuthorizeAttribute被默認構造函數調用。 – dexter 2011-04-06 20:01:36
@dexter,不'認爲是這樣。我把斷點和ctor與repo叫做 – 2011-04-06 20:04:52
你在Ninject模塊中設置了過濾器綁定嗎?請參閱http://www.planetgeek.ch/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/#more-2004中的「過濾器的依賴注入」一節下的示例代碼 – WorldIsRound 2011-04-06 20:08:03