asp.net-web-api ninject owin

asp.net web api - Ninject.ActivationException lanzada solo en la primera solicitud web(WebAPI 2, OWIN 3, Ninject 3)



asp.net-web-api (3)

¿Qué versión de la biblioteca Ninject.Web.WebApi está usando? Parece que hace 2 semanas se realizó un cambio para mover algunas cosas. antes de este cambio (v3.2.3 y anteriores), los enlaces HttpConfiguration estaban presentes en 2 módulos diferentes en Ninject.Web.WebApi.OwinHost.OwinWebApiModule y Ninject.Web.WebApi.WebApiModule . después de este cambio (la nueva versión es 3.2.4), este enlace solo ocurre una vez.

Estoy intentando crear un proyecto de API web "barebones" que utiliza el middleware OWIN, Ninject Depencency Injection, y que finalmente se alojará en IIS. He seguido las instrucciones que se encuentran en un artículo, "Hacer amistad con ASP.NET Web.API2, OWIN y Ninject", aquí: http://www.alexzaitzev.pro/2014/11/webapi2-owin-and-ninject.html , excepto Utilicé un Proyecto de aplicación web vacío y no marqué el "Incluir referencias y carpetas de API web" al crear el proyecto.

Cuando Ninject.ActivationException la nueva API y hago una solicitud de página, Ninject.ActivationException la siguiente Ninject.ActivationException arrojada:

Server Error in ''/'' Application. Error activating HttpConfiguration More than one matching bindings are available. Matching bindings: 1) binding from HttpConfiguration to method 2) binding from HttpConfiguration to constant value Activation path: 1) Request for HttpConfiguration Suggestions: 1) Ensure that you have defined a binding for HttpConfiguration only once.

Esta excepción desaparece cuando actualizo mi navegador. Realmente no entiendo qué está causando esta excepción. Desde mi punto de vista, al ser un poco inexperto con WebAPI en contexto OWIN y Ninject, es difícil saber dónde radica el problema. ¿Es con Ninject ...? ¿Está en OWIN ...? ¿Está en WebAPI ...?

Este es el contenido de mi archivo Startup.cs:

using System.Web.Http; using LHD.API_2; using Microsoft.Owin; using Microsoft.Owin.Security.OAuth; using Ninject.Web.Common.OwinHost; using Ninject.Web.WebApi.OwinHost; using Owin; [assembly: OwinStartup(typeof(Startup))] namespace LHD.API_2 { public class Startup { public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute("API Default", "api/1/{controller}/{action}/{id}", new { id = RouteParameter.Optional }); app.UseNinjectMiddleware(() => NinjectConfig.CreateKernel.Value); app.UseNinjectWebApi(config); } } }

Este es el contenido de mi archivo NinjectConfig.cs :

using System; using System.Reflection; using Ninject; namespace LHD.API_2 { public static class NinjectConfig { public static Lazy<IKernel> CreateKernel = new Lazy<IKernel>(() => { StandardKernel kernel = new StandardKernel(); kernel.Load(Assembly.GetExecutingAssembly()); RegisterServices(kernel); return kernel; }); private static void RegisterServices(KernelBase kernel) { // TODO - put in registrations here... //kernel.Bind<IFakeService>().To<FakeService>(); } } }

Este es el contenido de mis packages.config :

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.AspNet.WebApi" version="5.0.0" targetFramework="net451" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net451" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net451" /> <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net451" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.0.0" targetFramework="net451" /> <package id="Microsoft.Owin" version="3.0.1" targetFramework="net451" /> <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net451" /> <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net451" /> <package id="Ninject" version="3.2.0.0" targetFramework="net451" /> <package id="Ninject.Extensions.ContextPreservation" version="3.2.0.0" targetFramework="net451" /> <package id="Ninject.Extensions.NamedScope" version="3.2.0.0" targetFramework="net451" /> <package id="Ninject.Web.Common" version="3.2.0.0" targetFramework="net451" /> <package id="Ninject.Web.Common.OwinHost" version="3.2.3.0" targetFramework="net451" /> <package id="Ninject.Web.WebApi" version="3.2.0.0" targetFramework="net451" /> <package id="Ninject.Web.WebApi.OwinHost" version="3.2.4.0" targetFramework="net451" /> <package id="Owin" version="1.0" targetFramework="net451" /> </packages>

... y, para completar, el contenido de mi web.config tampoco es espectacular:

<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.5.1" /> <httpRuntime targetFramework="4.5.1" /> </system.web> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Http.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> <system.webServer> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <remove name="OPTIONSVerbHandler" /> <remove name="TRACEVerbHandler" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> </configuration>

¿Alguien puede indicarme qué es lo que estoy haciendo mal o, lo que es más importante, qué puedo cambiar para que las cosas funcionen sin la excepción de que se lanzaron?


Dirígete a Referances y busca Ninject.web.WebApi.WebHost y luego quítalo. Esto significa que comenzará a funcionar.


Tuve el mismo error, pero por una razón diferente: por alguna razón, instalé Ninject.Web.WebApi.WebHost y Ninject.Web.WebApi.OwinHost .

Si busca en el origen de OwinWebApiModule.cs y WebApiWebHostModule.cs , ambos módulos de Ninject tienen un enlace para HttpConfiguration .

Ninject.Web.WebApi.WebHost y todo está bien.