Problème lors de l’utilisation de l’API Web ASP.Net MVC 4 avec Ninject.Web.WebApi

J’essaie d’utiliser le nouveau modèle de projet API Web ASP.Net MVC 4 avec Ninject, mais je me suis heurté à un mur avec l’erreur suivante:

La méthode ‘GetFilters’ dans le type ‘Ninject.Web.WebApi.Filter.DefaultFilterProvider’ de l’assembly ‘Ninject.Web.WebApi, Version = 3.0.0.0, Culture = neutre, PublicKeyToken = c7192dc5380945e7’ n’a pas d’implémentation.

Je crée un nouveau projet dans Visual Studio 2010 à l’aide du modèle ASP.Net MVC 4 -> API Web et j’utilise les derniers packages Ninject NuGet:

  • Ninject 3.0.1.10
  • Ninject.Web.Common 3.0.0.7
  • Ninject.Web.WebApi 3.0.0.2

J’ai tenté la solution présentée dans cette question, mais je n’ai pas eu de chance. Si je supprime la référence à Ninject.Web.WebApi, MVC n’engage jamais Ninject. J’ai aussi remarqué qu’ils mentionnent Ninject.MVC3, mais j’utilise le nouveau plugin Ninject.WebApi .

J’utilise le code de liaison par défaut dans NinjectWebCommon.cs créé lors de l’installation de NuGet et tente d’enregistrer un service simple dans RegisterServices ().

[assembly: WebActivator.PreApplicationStartMethod(typeof(mkts.web.App_Start.NinjectWebCommon), "Start")] [assembly: WebActivator.ApplicationShutdownMethodAtsortingbute(typeof(mkts.web.App_Start.NinjectWebCommon), "Stop")] namespace mkts.web.App_Start { using System; using System.Web; using Microsoft.Web.Infrastructure.DynamicModuleHelper; using Ninject; using Ninject.Web.Common; using mkts.service; public static class NinjectWebCommon { private static readonly Bootstrapper bootstrapper = new Bootstrapper(); ///  /// Starts the application ///  public static void Start() { DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); bootstrapper.Initialize(CreateKernel); } ///  /// Stops the application. ///  public static void Stop() { bootstrapper.ShutDown(); } ///  /// Creates the kernel that will manage your application. ///  /// The created kernel. private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Bind<Func>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.Bind().To(); RegisterServices(kernel); return kernel; } ///  /// Load your modules or register your services here! ///  /// The kernel. private static void RegisterServices(IKernel kernel) { //Test binding kernel.Bind().To(); } } } 

Mon contrôleur:

 namespace mkts.web.Controllers { public class HomeController : Controller { private readonly IStudentService studentService; public HomeController(IStudentService studentService) { this.studentService = studentService; } public ActionResult Index() { return View(); } } } 

Merci beaucoup d’avance pour toute aide avec cela.

Ninject.WebApi a été écrit contre la bêta et est obsolète maintenant.

Supprimez cela, installez Ninject.MVC3.

Maintenant, vous aurez besoin d’un IDependencyResolver et IDependencyScope homebrewed. J’ai posté une procédure pas à pas ici – http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/