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.
Der Grund für diesen Fehler liegt darin, dass Ihnen die folgende Registrierung fehlt (wie im MVC-Integrationshandbuch
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.
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%Tags und Links asp.net-mvc asp.net controller dependency-injection simple-injector