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)