c# - with - Error constructor sin parametro con enlaces Ninject en.NET Web Api 2.1
ninject not working with web api (2)
Trabajando actualmente en la escritura de un sitio API (.NET Web Api 2.1)
Para nuestros sitios API anteriores, habíamos usado el paquete Ninject.MVC3 y habíamos conectado un resolvedor de dependencias y un alcance manualmente y conectado nuestra lógica en NinjectWebCommon según la recomendación.
Esto causaba acidez estomacal en nuestro nuevo proyecto con el error de constructor sin parámetros. En el pasado, esto era una obviedad de que no estábamos conectando correctamente el resolvedor de dependencias en Web Api. Solo que esta vez, lo fuimos. Estaba alli.
var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
Así que estaba un poco perdido. En la última semana, vi que Ninject se actualizó, el paquete de WebAPI nuget se reactivó, así que decidí intentarlo.
Instalé el paquete NuGet Ninject.Web.WebApi (versión 3.2). Esto no parece incluir un archivo NinectWebCommon.cs para aplicar enlaces. Solo agregó los ensamblajes necesarios. Al hacer algunas excavaciones encontré esta implementación.
https://gist.github.com/odytrice/5842010
(No estaba claro si el paquete Nuget estaba haciendo esto por mí y todo esto es código redundante. Si es así, genial, solo necesito una comprensión de cómo agregar nuestras vinculaciones con el paquete nuget ahora).
Implementé esta línea para la línea, excepto cuando cargué los módulos, cargué nuestros tres módulos individuales como prueba.
public static INinjectModule[] Modules
{
//get { return new INinjectModule[] { new MainModule() }; }
get { return new INinjectModule[] { new GlobalModule(), new InventoryModule(), new StoreModule() }; }
}
He verificado que la resolución de la dependencia se establece con este nuevo código.
_resolver = new NinjectHttpResolver(modules);
GlobalConfiguration.Configuration.DependencyResolver = _resolver;
Pero aún así, el problema persiste.
ExceptionMessage:
An error occurred when trying to create a controller of type ''StoreSearchController''.
Make sure that the controller has a parameterless public constructor.
StackTrace:
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.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()
Excepción de excepción interna Tipo: System.ArgumentException
StackTrace:
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)
Estoy perdido He visto muchas publicaciones sobre el hecho de tener que establecer también un resolvedor de dependencias MVC, pero no creí que estuviera relacionado ya que en este caso no tenemos controladores MVC fuera del controlador doméstico que no use Ninject.
Otras cositas que pueden o no importar. Estamos usando el enrutamiento de atributos.
Cualquier ayuda es apreciada.
Además, verifique que su constructor sea público. Esto es fácil pasar por alto.
Tienes que instalar uno de los paquetes de alojamiento:
- Ninject.Web.WebApi.WebHost
- Ninject.Web.WebApi.SelfHost
- Ninject.Web.WebApi.OwinHost