2012-12-24 12 views
18

W MVC po prostu utworzę klasę NinjectControllerFactory, która implementuje interfejs DefaultControllerFactory, a następnie wykonuję niektóre wiązania. wreszcie w Global go uruchomić:Jak korzystać z programu Ninject z interfejsem ASP.NET Web API?

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

Ale co z użyciem Ninject w ASP.NET Web API? jest trochę informacji w Internecie, ale są przestarzałe i dla wersji wcześniej wydanych.

Czy istnieje prosty sposób na ten problem?

Odpowiedz

19

Powodem, dla którego wiele artykułów jest starych, jest to, że podejście nie zmieniło się od czerwca 2012 r. (RC wydany 31 maja). Musisz dodać pakiet Ninug MVC3 Nuget, a następnie zaimplementować "IDepenencyResolver", a następnie zarejestrować swoją implementację.

Dwie najlepsze kabiną thoughs są:

  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

Wygląda na to, że to aktualizacja na dwóch różnych pakietów Nuget: [Ninject.Web.WebApi] (http://nuget.org/packages/Ninject .Web.WebApi/3.0.0.2) i [Ninject.Web.WebApi.Updated] (http://nuget.org/packages/Ninject.Web.WebApi.Updated/). Wygląda na to, że pierwszy jest jeszcze w wersji przedpremierowej. –

+0

Rozwiązanie z artykułu peterprovost wydaje się przerwać powiązania InSingletonScope, zasadniczo tworząc wszystko na żądanie http. "Oficjalna" obsługa webapi w dziewictwie zdaje się być nigdzie bliska produkcji, więc przejdzie na Auotfac, które wydają się wspierać WebApi (i nie tylko): https://code.google.com/p/autofac/wiki/ WebApiIntegration – Dmitry

+0

Próbowałem pierwsze podejście, działa pięknie. – liang

5

Aktualna wersja Ninject.Web.WebApi, od co najmniej 3.2.1.0, nie wymaga niczego dodatkowe należy dodać ręcznie. Wystarczy dodać paczkę i zarejestrować wszystko w NinjectWebCommon.cs, jak zwykle.

+2

Należy również wykonać instrukcje na http://stackoverflow.com/questions/22768721/parameterless-constructor-error-with-ninject-indings-in-net-web-api-2-1 – P6345uk

4

For Web Api 2 trzeba te pakiety Nuget -

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

i trzeba edytować NinjectWebCommon.CreateKernel(..) zawierać

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

Pisałem szczegółowe blogu tutaj - http://NoDogmaBlog.bryanhogan.net/2016/04/web-api-2-and-ninject-how-to-make-them-work-together/ tym pełne rozwiązanie do pobrania.

1

Poniższe kroki działają jak Sharm dostać Ninject pracuje nad projektem WebAPI:

  1. Zainstaluj pakiet Ninject.Web.WebApi Nuget.
  2. Zainstaluj pakiet Ninject.Web.WebApi.WebHost NuGet.
  3. Zarejestruj zależności w metodzie "RegisterServices" w pliku NinjectWebCommon dodanym do folderu App_Start. Tak:

Private static void RegisterServices(IKernel kernel)
{

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

} 
Powiązane problemy