WebApi DI Autofac - Stellen Sie sicher, dass der Controller über einen parameterlosen öffentlichen Konstruktor verfügt

8

Ich schreibe die Web-API mit Dependency-Injektion, Arbeitseinheit mit Hilfe von Repositories und Autofac als Container. Die Abhängigkeit wurde vor 24 Stunden perfekt injiziert, aber plötzlich, als ich heute anfing zu arbeiten, erhielt ich den Fehler

  

"Nachricht": "Ein Fehler ist aufgetreten.", "ExceptionMessage": "Ein Fehler   Beim Versuch, einen Controller vom Typ zu erstellen, ist ein Fehler aufgetreten   'SearchController'. Stellen Sie sicher, dass der Controller parameterlos ist   öffentlicher Konstruktor. "," ExceptionType ":   "System.InvalidOperationException",

Ich werde meine Signaturen und wie ich die Typen registriere hinzufügen und bin wirklich froh, wenn jemand darauf hinweisen kann, was mit meinem Code falsch läuft.

Auf meinem Web-API-Controller habe ich

%Vor%

Die Einheit der Arbeit verwendet den generischen Typparameter, um das Repository zu erstellen.

In meiner WebApiConfig.cs registriere ich die Typen wie folgt

%Vor%

Ich registriere den SearchController, um den Konstruktor zu verwenden, der IUnitOfWork & lt; & gt; Es hat alles gut funktioniert, bevor ich Mocked Unit Tests hinzugefügt habe, aber aus irgendeinem Grund bekomme ich diesen Fehler jetzt. Ich habe auch DependencyResolver registriert

%Vor%     
Ali Baig 14.11.2015, 14:59
quelle

2 Antworten

6

Da es zu dieser Frage viele Antworten gibt, die noch keine Antworten haben, erinnere ich mich nicht genau, wie ich es geschafft habe, aber ich möchte die neueste Technik teilen, die in vielen Projekten perfekt funktioniert hat.

1) So registriere ich meinen generischen Bereich und meine Arbeitseinheit

%Vor%

2) So stelle ich den Dependency Resolver für meine WebAPI ein

%Vor%

3) Um es für MVC-Controller zu registrieren,

%Vor%

Dieser Ansatz funktioniert sowohl auf MVC- als auch auf WebAPI-Controllern und ich kann das einfach tun

%Vor%

Ich hoffe, es hilft jemandem in der Zukunft.

    
Ali Baig 28.10.2016, 22:25
quelle
1

Ich hatte das gleiche Problem und das Problem bestand darin, dass ich Autofac-Codebeispiele für das ContainerBuilder () - Objekt für MVC-Controller und nicht API verwendete.

Hier ist ein gutes Beispiel, wie man es mit ApiController

konfiguriert     
neustart47 03.09.2017 23:35
quelle