2012-04-05 10 views
3

Ich bin ziemlich neu in Unity & IoC im Allgemeinen & wie üblich, habe ich mich schnell in eine Sackgasse bekam ...Dependency Injection in einen AuthorizationFilterAttribute

Ich habe ein Autorisierungs-Filter Attribut für das ASP.NET Web erstellt API Beta. Ich muss jetzt meinen Authorizer in das Attribut injizieren, aber da dies ein Attribut ist, kann ich das public TestAuthAttribute(IAuthorizer Authorizer) in meinem Konstruktor nicht einfach tun.

Also entschied ich mich dann, eine öffentliche Eigenschaft zu erstellen, die mit dem [Dependency] -Attribut für die Property-Injektion dekoriert wurde, aber es wird nicht aufgelöst. Hier

ist der Code:

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 
    } 

Wenn die Steuerung mit dem dekoriert [TestAuth] das Attribut ausgelöst wird, aber die Authorizer nicht gelöst, es ist null)

I gesetzt haben folgende Code in meinem Controller & Authorizer nicht gelöst bekommen ...

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

Warum ist diese Abhängigkeit in meinem AuthorizationFilterAttr nicht behoben ibute & Wie würden Sie den Authorizer in AuthorizationFilterAttribute injizieren?

Antwort

0

Volle Offenbarung: Ich habe Turbine nicht verwendet.

Nachdem ich das gesagt habe, denke ich, es könnte Ihr Problem für Sie lösen oder Ihnen zumindest zeigen, wie Sie es lösen können.

Sie haben eine Einheit Nuget Paket hier: http://nuget.org/packages/MvcTurbine.Unity

Und können Sie weitere Einzelheiten über ihre Codeplex-Website finden Sie hier: http://mvcturbine.codeplex.com/

Hoffnung, das hilft.

+0

Danke für die Antwort. Da ich also ziemlich neu für IoC bin, schließe ich aus dem Link, dass MVC das FilterAttribute instantiiert und daher die Abhängigkeitsinjektion niemals stattfindet. Ist das im Grunde was passiert? –

+0

@TimBhd Richtig. Sofern Sie es nicht explizit an Ihren Container anschließen, weiß MVC nicht, dass Sie versuchen, Unity zu verwenden. Siehe auch diesen Beitrag: http://stackoverflow.com/questions/1035611/mv-unity-how-to-inject-dependencies-into-custom-filterattributes. Ich denke, das ist eine direktere Lösung, wenn Sie nicht von Turbine abhängig sein wollen. –

+0

@TimBhd Siehe auch Jimmy Bogards Beitrag: http://losetechies.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. –

0

Ich benutze Ninject für einen ähnlichen Zweck. Ich habe einen Verweis auf Ninject.Web.WebAPI, die perfekt funktioniert.

Dies funktioniert jedoch nicht mit MVC4 RC.