22 Stimmen

Wie führt man die Injektion von Abhängigkeiten in Aktionsfilter auf ASP.NET Web API aus?

Ich wirklich auf den Ansatz zu tun, Abhängigkeit Injektion in Aktion Filter von Web-Api stecken. Ich habe eine Aktion Filter wie diese:

public class AuthorizationAttribute : ActionFilterAttribute
{
    public IApiKeyRepository Repository { get; set; }

    private Guid GetApiKey(string customerKey)
    {
        return Repository.GetApiKey(customerKey);
    }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {        
    }
}

Ich möchte Eigenschaft Injektion auf die Eigenschaft Repository mit Windsor tun (aber es spielt keine Rolle, welche IoC-Container verwendet wird)

Ich kam bis zu FilterProvider anpassen, aber es hat nicht für mich arbeiten, hat jemand Lösung oder laufenden Code auf diese? es wird sehr geschätzt werden

4voto

AlexGad Punkte 6457

Sie müssen Ihre spezifische IOC-Implementierung überprüfen. IOC-Container wie NInject und Autofac haben eine Art von Filterinjektion durch Injektion von öffentlichen Eigenschaften. Bei Windsor bin ich mir nicht sicher, aber hier ist ein Link, der einen Wrapper erstellt, der bei Windsor helfen könnte: http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-filters/ und einen weiteren Artikel, der sich direkt mit dem Thema Windsor befasst: http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx .

Zur Vervollständigung mit NInject und Autofac:

NInject:

Autofac:

**EDIT - zusätzliche Option **

Sie sollten in der Lage sein, Folgendes zu tun GlobalConfiguration.Configuration.DependencyResolver.GetService(...) von jedem Filter, unabhängig vom verwendeten IOC-Container.

4voto

Vladimir Punkte 7147

Für WebAPI und AutoFac können Sie verwenden:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

Die Dokumentation ist aquí .

1voto

Paige Cook Punkte 22179

Sie können die Ninject.Web.WebApi-Assembly verwenden (natürlich mit Ninject als IoC), damit dies funktioniert. Ich würde vorschlagen, dass Sie sich den Quellcode und die Beispielanwendung über https://github.com/ninject/Ninject.Web.WebApi um zu sehen, wie sie die Filterinjektion durchführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X