Wie bekomme ich StructureMap, das mit einem AngularJs / MVC5- und WebApi2-Webprojekt arbeitet?

8

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?

    
sarin 10.07.2014, 08:11
quelle

1 Antwort

15

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?

  1. Installieren Sie das nugget-Paket StructureMap.MVC5, das über die Installation verfügt, damit dies funktioniert.

    Install-Paket StructureMap.MVC5

  2. Erstellen Sie eine neue StructureMapDependencyResolver-Klasse, die sowohl für MVC als auch für WebApi funktioniert

    %Vor%
  3. 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

    
sarin 10.07.2014, 08:11
quelle