Utknąłem. Użyłem metody opisanej tutaj dla wcf web api p6 Ninject working with WCF Web API Preview 5, jednak rzeczy są całkiem inne z implementacją mvc w wersji beta. Tutaj jest dobry artykuł o nazwie http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver, który mówi o budowaniu własnego niestandardowego narzędzia do rozwiązywania zależności, ale chciałbym użyć tej samej implementacji, której używam dla moich kontrolerów widoku mvc ... np. Ninject. Próbowałem kilku rzeczy na podstawie przykładu IoC Unity również w tym artykule, ale nic jeszcze nie zostało wyjaśnione. Każda pomoc wskazująca mi we właściwym kierunku byłaby bardzo doceniana. Zamierzam też dalej kopać na własną rękę. Z góry dziękuję!Używanie programu Ninject z interfejsem API ASP.NET Beta ApiController
Oto, gdzie jestem. Używałem programu WebActivator do bootstrapowania kodu, ale od tego czasu upuściłem go do Application_Start() tylko po to, aby wyciągnąć jeszcze jedną rzecz z równania.
protected void Application_Start()
{
var kernel = new StandardKernel(new MyNinjectModule());
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
I otrzymuję następujący błąd:
Typ Ninject.Web.Mvc.NinjectDependencyResolver nie wydaje się wdrożenie Microsoft.Practices.ServiceLocation.IServiceLocator. Nazwa
Parametr: commonServiceLocator
Znaleziono rozwiązanie
może jest/będzie bardziej elegancki sposób, ale teraz pracuje dla mnie. Dodaję tu również moją niestandardową procedurę obsługi komunikatów.
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart.ApiBootstrapper), "Start")]
namespace MyApp.AppStart
{
public class ApiBootstrapper
{
public static void Start()
{
var kernel = new StandardKernel(new MyNinjectModule());
var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(resolver.GetService, resolver.GetServices);
GlobalConfiguration.Configuration.MessageHandlers.Add(new ApiAuthHandler());
}
}
}
Jest to dość miłe rozwiązanie: http://haacked.com/archive/2012/03/11/itrsquos- the-little-things-about-asp-net-mvc-4.aspx –
również sprawdź pakiet @Remo Gloor poniżej, jeśli chcesz używać tych samych wiązań dla obu typów kontrolerów. Możesz go znaleźć na github i zainstalować z nuget. –