2014-05-19 10 views
12

Wie kann ich die Abhängigkeit Resolver-Instanz in Web API erhalten? In asp.net mvc kann ich DependencyResolver.Current tun, gibt es eine Entsprechung in Web API?Wie Instanz des Abhängigkeits-Resolvers in ASP.NET-Web-API erhalten

+0

Wahrscheinlich kennen Sie das schon, aber ich muss Ihnen die obligatorische Warnung geben: Sie sollten zulassen, dass der Dependency Resolver die notwendigen Abhängigkeiten in Ihre Klassen einfügt, indem er den Api Controller als Kontextstamm verwendet und nicht auf der Suche nach dem Abhängigkeits-Resolver. – StriplingWarrior

+6

Ja, der Grund, warum ich den Resolver verwenden muss, ist innerhalb eines benutzerdefinierten Modellbinders, der mit dem Modelbinder-Attribut anstelle eines Modellbinderanbieters festgelegt wird. Daher wird er mit einem parameterlosen Konstruktor instanziiert, sodass ich den Service verwenden muss Ort, um die Abhängigkeiten zu erhalten. – ryudice

+0

Nur ein Hinweis: http://stackoverflow.com/questions/21919753/. Bitte nehmen Sie es als eine andere Ansicht - warum "IDependencyResolver" zu vermeiden. ServiceLocator könnte/sollte als Antipattern angesehen werden http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx –

Antwort

9

Ignorieren Sie, was die Leute über ein Anti-Pattern sagen. Insbesondere mit diesen jungen Technologien werden Sie keine vollständige DI-Abdeckung erhalten. Zum Beispiel hat zum Zeitpunkt des Schreibens NInject keine Unterstützung für die Injektion in Middlewares.

Um Ihre Frage zu beantworten, ist der Abhängigkeits-Resolver für eine Anfrage unter HttpRequestMessage.GetDependencyScope() verfügbar. Sie können auch HttpConfiguration.DependencyResolver verwenden. Beachten Sie jedoch, dass dieser Bereich für die Ausführung der Anforderung nicht ordnungsgemäß definiert ist.

Ich würde empfehlen, die Dokumentation für die spezifische IOC-Implementierung zu überprüfen.

Verwandte Themen