Simple Injector - Für dieses Objekt ist kein parameterloser Konstruktor definiert

8

Ich habe ein neues MVC-Webprojekt, in dem ich MVC und WebApi verwende. Ich habe Simple Injector (Version 2.5.2 von nuGet) mit dem folgenden Code in meiner globalen Datei eingerichtet

%Vor%

In meiner SimpleInjectorConfig.cs Datei habe ich

%Vor%

Jetzt habe ich 2 Controller, 1 ist ein WebApi-Controller und 1 ist ein normaler MVC-Controller.

Mein WebApi-Controller funktioniert einwandfrei und sieht so aus

%Vor%

Wie gesagt, der obige Code funktioniert gut, ich kann die URL ausführen und sie gibt zurück, was ich erwarten würde.

Jetzt habe ich meinen MVC-View-Controller, der dem oben genannten sehr ähnlich sieht, hier ist es

%Vor%

Jetzt kann ich überhaupt nicht verstehen, warum ich den folgenden Fehler bekomme. Ich kann keinen öffentlichen Konstruktor hinzufügen, da dies einen Fehler bei SimpleInjector verursacht.

%Vor%

Wenn mir jemand in die richtige Richtung zeigen könnte, wäre das großartig.

    
Gillardo 22.09.2014, 11:39
quelle

2 Antworten

18

Der Grund für diesen Fehler liegt darin, dass Ihnen die folgende Registrierung fehlt (wie im MVC-Integrationshandbuch ):

%Vor%

MVC und Web API haben beide eine eigene Abstraktion für die Auflösung von Abhängigkeiten (beide als 'Abhängigkeits-Resolver' bezeichnet). Da Sie den Resolver für MVC nicht festgelegt haben, verwendet MVC den Standardauflösungsmechanismus zum Erstellen von MVC-Controllern, erfordert jedoch, dass Controller über einen Standardkonstruktor verfügen.

Der Aufruf von DependencyResolver.SetResolver löst das Problem.

    
Steven 22.09.2014, 12:01
quelle
2

Bei Web-API-Projekten wird die oben beschriebene SetResolver-Methode kompiliert, aber wenn die Anwendung ausgeführt wird, erhalten Sie einen ArgumentException-Fehler: "Zusätzliche Informationen: Der Typ SimpleInjector.Integration.WebApi.SimpleInjectorWebApiDependencyResolver scheint Microsoft nicht zu implementieren. Practices.ServiceLocation.IServiceLocator. "

Sie werden dieses Problem lösen, indem Sie den DependencyResolver auf einen SimpleInjectorWebApiDependencyResolver setzen und Ihren Container wie unten angeben.

%Vor%     
sondlerd 23.08.2017 17:54
quelle