web-dev-qa-db-fra.com

Web API2 NinjectWebCommon.cs n'apparaissent pas

Je fais un Empty Web API in Visual Studio 2013 Cadre 4.5. Évidemment NinjectWebCommon.cs n'apparait pas.

J'ai installé via Nuget,

  • Ninject,
  • Ninject.Web.Common,
  • Ninject.MVC5,
  • Ninject.Web.Common.WebHost,
  • Ninject.Web.WebApi,

  • Ninject.web.WebApi.WebHost

    mais NinjectWebCommon.cs n'apparaît toujours pas.

De quoi d'autre ai-je besoin pour installer?

Puis-je ajouter ce fichier manuellement?

merci

14
Diego

Il semble que le package NuGet Ninject.Web.Common.WebHost 3.3.0 le plus récent n'inclut plus le NinjectWebCommon.cs. Les versions plus anciennes, telles que 3.2.0 incluent ce fichier.

Ninject.Web.Common.WebHost 3.3.0 fournit une classe NinjectHttpApplication dont vous pouvez dériver et utiliser à la place de NinjectWebCommon.cs. La documentation wiki pour Ninject ne semble pas avoir été mise à jour mais il semble que l'utilisation de NinjectHttpApplication soit une approche documentée, comme indiqué ci-dessous:

public class MvcApplication : NinjectHttpApplication
{
   public static void RegisterGlobalFilters(GlobalFilterCollection filters)
   {
       filters.Add(new HandleErrorAttribute());
   }

   public static void RegisterRoutes(RouteCollection routes)
   {
       routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

       routes.MapRoute(
           "Default", // Route name
           "{controller}/{action}/{id}", // URL with parameters
           new
           {
               controller = "Home",
               action = "Index",
               id = UrlParameter.Optional
           });
   }

   protected override IKernel CreateKernel()
   {
       var kernel = new StandardKernel();
       RegisterServices(kernel);
       return kernel;
   }

   /// <summary>
   /// Load your modules or register your services here!
   /// </summary>
   /// <param name="kernel">The kernel.</param>
   private void RegisterServices(IKernel kernel)
   {
       // e.g. kernel.Load(Assembly.GetExecutingAssembly());
   }

   protected override void OnApplicationStarted()
   {
       base.OnApplicationStarted();

       AreaRegistration.RegisterAllAreas();
       RegisterGlobalFilters(GlobalFilters.Filters);
       RegisterRoutes(RouteTable.Routes);
   }
}
30
Matt Ward

Testé avec le dernier Ninject: créer une application Web vide et cocher les cases pour Mvc et Web Api

Installer le package Nuget: Ninject.Web.WebApi.WebHost

Installer le package Nuget: WebActivatorEx

Créez une classe dans App_Start nommée NinjectWebCommon.cs

 [Assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
 [Assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(NinjectWebCommon), "Stop")]

 namespace <YOURNAMESPACE>
 {
     public static class NinjectWebCommon
     {
         private static readonly Bootstrapper bootstrapper = new Bootstrapper();

         public static void Start()
         {
             DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
             DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
             bootstrapper.Initialize(CreateKernel);
         }

         public static void Stop()
         {
             bootstrapper.ShutDown();
         }

         private static IKernel CreateKernel()
         {
             var kernel = new StandardKernel();
             kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
             kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

             RegisterServices(kernel);
             return kernel;
         }
         private static void RegisterServices(IKernel kernel)
         {
           //kernel.Bind<IRepo>().ToMethod(ctx => new Repo("Ninject Rocks!"));
         }
     }
 }

Configurez votre DI dans RegisterServices

Ajouter une dépendance aux paramètres du constructeur des contrôleurs Mvc ou Web Api

J'espère que ça aide, merci.

8
AngelBlueSky

Si vous souhaitez obtenir la classe NinjectWebCommon générée automatiquement dans le dossier App_Start, vous devez modifier la valeur de Dependency behavior option sur Highest dans NuGet Package Manager. Il téléchargera toutes les dépendances, y compris NinjectWebCommon. enter image description here

5
Yaroslav