Ich bin versucht, eine "Barebones" Web-API-Projekt zu erstellen, die OWIN Middleware, Ninject Depencency Injection verwendet und schließlich in IIS gehostet werden . Ich habe Anweisungen in einem Artikel, „Befriending ASP.NET Web.API2, OWIN und Ninject,“ hier gefolgt: http://www.alexzaitzev.pro/2014/11/webapi2-owin-and-ninject.html, außer ich ein leeres Web Application Project verwendet, und nicht kreuzte die „Web-API-Referenzen und Ordner einbeziehen“, wenn Erstellen des Projekts.nur auf den ersten Web-Anfrage (WebAPI 2, OWIN 3, Ninject 3) Ninject.ActivationException geworfen
Wenn ich die neue API anwerfen und eine Seitenanforderung machen, erhalte ich die folgende Ninject.ActivationException
geworfen:
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.
Diese Ausnahme geht weg, wenn ich meinen Browser aktualisieren. Ich verstehe wirklich nicht, was diese Ausnahme verursacht. Aus meiner Sicht etwas unerfahren mit WebAPI in OWIN Kontext und Ninject zu sein, ist es schwer zu wissen, wo das Problem liegt. Ist es mit Ninject ...? Ist es in OWIN ...? Ist es in WebAPI ...?
Dies ist der Inhalt meiner Startup.cs Datei:
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);
}
}
}
Dies ist der Inhalt meiner NinjectConfig.cs Datei:
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>();
}
}
}
Dies ist der Inhalt meiner Pakete .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>
... und, aus Gründen der Vollständigkeit, ist der Inhalt meiner web.config ähnlich unspektakulär:
<?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>
jemand auf mich zeigen kann, was ich falsch mache, oder was noch wichtiger ist, was ich ändern kann Dinge funktionieren zu lassen, ohne dass die Ausnahme ausgelöst wird?
Thanks @ dave-Thieben. Die Aktualisierung auf die neuesten Ninject-Pakete hat meine Probleme gelöst. –
Ich habe das "Ninject.Web.WebApi.WebHost" Nuget Paket Version 3.2.4 installiert. Dies installiert die Abhängigkeit von 'Ninject.Web.WebApi' aber verwendete Version 3.2.0. Aktualisierung auf den neuesten (3.2.4) reparierte es für mich – Colin