2017-08-01 1 views
1

Ich habe eine .NET 4.5 WebApi-App erstellt und versuche SimpleInjector zu verwenden.SimpleInjector verifiziert OK, löst jedoch bei der ersten Anfrage einen Konstruktorfehler ohne Parameter aus

Alles scheint zu registrieren OK - wenn ich container.Verify() mache, lädt mein WebApi-Controller mit den relevanten Objekten in den Konstruktor injiziert.

Allerdings, wenn ich mein Endpunkt treffen, erhalte ich die berüchtigte „Ein Fehler ist aufgetreten, wenn eine Steuerung des Typs‚XxxController‘zu schaffen versuchen. Vergewissern Sie sich, dass der Controller einen parameter öffentlichen Konstruktor hat.

Meine IoC Konfiguration unten:

Startup.IoC.cs

public Container ConfigureIoC(IAppBuilder app) 
{ 
    var container = new Container(); 
    container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle(); 

    RegisterInstances(container); 

    GlobalConfiguration.Configuration.DependencyResolver = 
     new SimpleInjectorWebApiDependencyResolver(container); 

    app.Use(async (context, next) => 
    { 
     using (AsyncScopedLifestyle.BeginScope(container)) 
     { 
      await next(); 
     } 
    }); 

    return container; 
} 

private void RegisterInstances(Container container) 
{ 
    RegisterWebApiControllers(container); 
    // Other registrations here 

    container.Verify(); 
} 

private void RegisterWebApiControllers(Container container) 
{ 
    container.RegisterWebApiControllers(GlobalConfiguration.Configuration); 
} 

Exception

Beim Versuch, einen Controller vom Typ 'LocationController' zu erstellen, ist ein Fehler aufgetreten. Stellen Sie sicher, dass der Controller über einen parameterlosen öffentlichen Konstruktor verfügt.

at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() 

Innerexception

Typ 'IP2LocationAPI.Web.Controllers.v1.LocationController' keinen Standardkonstruktor

at System.Linq.Expressions.Expression.New(Type type) 
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) 
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 

Antwort

1

Diese Antwort es fest für mich: https://stackoverflow.com/a/28231437/397852

Die Einstellung des Abhängigkeits-Resolvers gegen die HttpConfiguration Instanz anstelle der GlobalConfiguration.Configuration Methode funktioniert grundsätzlich;

HttpConfiguration config = new HttpConfiguration 
    { 
     DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); 
    }; 
Verwandte Themen