2012-04-05 51 views
3

我一般&像往常一樣很新的統一&的IoC依賴注入到AuthorizationFilterAttribute

我已經創建了的ASP.NET Web的授權篩選器屬性,我趕緊讓自己陷入到困境...... API測試版。我現在需要將我的授權者注入到屬性中,但是由於這是一個屬性,我不能簡單地在我的構造函數中執行此public TestAuthAttribute(IAuthorizer Authorizer)

因此,我決定創建一個公共屬性裝飾屬性注入的[依賴]屬性,但它不會得到解決。

下面是代碼:

public class TestAuthAttribute : AuthorizationFilterAttribute 
{ 
    [Dependency] 
    public IAuthorizer Authorizer { get; set; } 

    public TestAuthAttribute() { 
     ... 
     } 

    private bool authorizeCore(HttpRequestMessage request) 
    { 
     if (Authorizer == null) 
      throw Error.ArgumentNull("Null Authorizer"); // <<<<< this is null 
    } 

當控制器則飾以[TestAuth]屬性被觸發,但授權人沒有解決,它爲空)

我已經把下面的在我的控制器&授權者的代碼不會得到解決......

[Dependency] 
    public IAuthorizer Authorizer { get; set; } 

爲什麼這種依賴性不是我AuthorizationFilterAttr解決ibute &你會如何將授權者注入AuthorizationFilterAttribute?

回答

0

完全披露:我沒有使用渦輪。

話雖如此,我認爲它可能爲您解決您的問題,或至少告訴您如何解決它。

他們有一個統一的NuGet包在這裏:http://nuget.org/packages/MvcTurbine.Unity

而且你可以在自己的名爲CodePlex的網站在這裏找到更多的細節:http://mvcturbine.codeplex.com/

希望有所幫助。

+0

感謝您的回覆。所以,對於IoC來說這是相當新穎的,我從鏈接中推斷出MVC正在實例化FilterAttribute,因此依賴注入永遠不會發生。這基本上是發生了什麼? – 2012-04-05 23:52:46

+0

@TimBhd對。除非你明確地將它連接到你的容器,否則MVC不知道你正在嘗試使用Unity。另見這篇文章:http://stackoverflow.com/questions/1035611/mvc-unity-how-to-inject-dependencies-into-custom-filterattributes。如果你不想依賴Turbine,我認爲這是一個更直接的解決方案。 – 2012-04-06 00:26:04

+0

@TimBhd另請參見Jimmy Bogard的文章:http://lostechies.com/jimmybogard/2010/05/03/dependency-injection-in-asp-net-mvc-filters/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+ LosTechies +%2528LosTechies%2529。 – 2012-04-06 00:28:00

0

我使用Ninject出於類似的目的。我確實有一個Ninject.Web.WebAPI的參考,它可以很好地工作。

但是,這似乎不適用於MVC4 RC。