Ich habe also ein AngularJs / MVC-Projekt mit normalen Controllern und entschloss mich, mehr in eine SPA-App zu verschieben und WebApi2 hinzuzufügen, um Daten an meine Benutzeroberfläche zu übergeben, anstatt MVC zu verwenden.
In meinem Global.asax hatte ich folgendes für mein MVC-Projekt:
DependencyResolver.SetResolver (neues StructureMapDependencyResolver (container));
Mein WebApiController hat einen Konstruktor mit einem IRepository, um mit der Datenbank zu sprechen und einige Entitäten zurück zu bekommen. Wenn meine AngularJS-Webanwendung den Controller anruft, werden die Breakpoints niemals ausgelöst und ich bekomme Server 500-Fehler mit sehr wenigen Informationen zurück.
%Vor%Ich habe Fehler wie:
gesehen"ExceptionType": "System.ArgumentException", "Nachricht": "Typ 'MyProject.Web.Controllers.MyController' hat keine Standardeinstellung Konstruktor "
Ich möchte keinen Standardkonstruktor hinzufügen. Warum bekomme ich das und wie repariere ich es?
Dies geschieht, weil die Abhängigkeitsauflösung für den WebApi-Controller nicht funktioniert. StructureMap findet den Konstruktor nicht und kann das IThingRepository nicht auflösen.
WebApi und MVC funktionieren anders und haben eine etwas andere Abhängigkeitsauflösungsmechanik. Der Global.asax-Code "DependencyResolver.SetResolver" funktioniert für MVC aber nicht für WebAPi. Wie schaffen wir das?
Installieren Sie das nugget-Paket StructureMap.MVC5, das über die Installation verfügt, damit dies funktioniert.
Install-Paket StructureMap.MVC5
Erstellen Sie eine neue StructureMapDependencyResolver-Klasse, die sowohl für MVC als auch für WebApi funktioniert
%Vor%Aktualisieren Sie den Global.asax-Code:
%Vor%Für eine vollständige Erklärung dessen, was gerade passiert, lesen Sie diesen Blogeintrag auf ASP.NET MVC 4, Web API und StructureMap
Tags und Links angularjs asp.net-web-api2 asp.net-mvc-5 structuremap