18

In MVC mache ich einfach die Klasse NinjectControllerFactory, die DefaultControllerFactory Schnittstelle implementiert dann einige Bindungen in es tun. Endlich in Global ich es laufen:Wie wird Ninject mit der ASP.NET-Web-API verwendet?

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 

Aber was Ninject in ASP.NET Web API? Es gibt einige Informationen im Internet, aber veraltet und für vorab veröffentlichte Versionen.

Gibt es einen einfachen Weg für dieses Problem?

Antwort

19

Der Grund, warum viele Artikel alt sind, liegt darin, dass sich der Ansatz seit Juni 2012 nicht geändert hat (RC wurde am 31. Mai veröffentlicht). Sie müssen das Ninject MVC3 Nuget-Paket hinzufügen, dann 'IDepenencyResolver' implementieren und dann Ihre Implementierung registrieren.

Die besten zwei begehbare thoughs sind:

  1. http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/
  2. http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api/
+1

Es sieht aus wie es ein Update auf zwei verschiedenen Nuget Pakete: [Ninject.Web.WebApi] (http://nuget.org/packages/Ninject .Web.WebApi/3.0.0.2) und [Ninject.Web.WebApi.Updated] (http://nuget.org/packages/Ninject.Web.WebApi.Updated/). Es scheint, dass der erste noch in einer Vorabversion ist. –

+0

Lösung von peterprovost Artikel scheint InSingletonScope Bindungen zu brechen, im Wesentlichen alles per-http-Anfrage. "Offizielle" webapi-Unterstützung in ninject scheint bei weitem nicht die Produktion zu sein, also wird sie zu Auotfac wechseln, das WebApi (und mehr) scheinbar sofort unterstützt: https://code.google.com/p/autofac/wiki/ WebApiIntegration – Dmitry

+0

Ich habe den ersten Ansatz versucht, es funktioniert wunderbar. – liang

5

Die aktuelle Version von Ninject.Web.WebApi, da zumindest 3.2.1.0, benötigt nicht länger etwas Zusätzlich manuell hinzugefügt werden. Fügen Sie einfach das Paket hinzu und registrieren Sie alles wie üblich in NinjectWebCommon.cs.

+2

Sie müssen auch Anweisungen auf http://stackoverflow.com/questions/22768721/parameterless-constructor-error-with-ninject-bindings-in-net-web-api-2-1 folgen – P6345uk

4

für Web-Api 2 Sie müssen diese nuget Pakete -

Ninject 
Ninject.Web.Common 
Ninject.Web.WebApi 
Ninject.Web.Common.WebHost 
WebActivatorEx 

Und Sie brauchen NinjectWebCommon.CreateKernel(..) zu bearbeiten

RegisterServices(kernel); 
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 
return kernel; 

aufzunehmen Ich habe hier einen ausführlichen Blog-Eintrag geschrieben - http://NoDogmaBlog.bryanhogan.net/2016/04/web-api-2-and-ninject-how-to-make-them-work-together/ einschließlich einer vollständigen Lösung zum Herunterladen.

1

Die folgenden Schritte wie ein sharm arbeiten Ninject arbeitet an einem WebAPI Projekt zu erhalten:

  1. die Ninject.Web.WebApi NuGet Paket installieren.
  2. Installieren Sie das Ninject.Web.WebApi.WebHost NuGet-Paket.
  3. Registrieren Sie Ihre Abhängigkeiten in der Methode "RegisterServices" in der Datei NinjectWebCommon, die zum Ordner App_Start hinzugefügt wurde. Wie folgt aus:

Private static void RegisterServices(IKernel kernel)
{

kernel.Bind <IFoo>().To <Foo>(); 

} 
Verwandte Themen