Web API2 NinjectWebCommon.cs不会出现

时间:2017-10-29 14:08:50

标签: c# asp.net asp.net-web-api nuget ninject

我正在做Empty Web API in Visual Studio 2013框架4.5。显然NinjectWebCommon.cs没有出现。

我是通过Nuget安装的,

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

  • Ninject.web.WebApi.WebHost

    NinjectWebCommon.cs仍然没有出现。

我还需要安装什么?

我可以手动添加该文件吗?

谢谢

3 个答案:

答案 0 :(得分:28)

看起来最新的Ninject.Web.Common.WebHost 3.3.0 NuGet包不再包含NinjectWebCommon.cs。旧版本(例如3.2.0)包含此文件。

Ninject.Web.Common.WebHost 3.3.0提供了一个NinjectHttpApplication类,您可以使用它来代替NinjectWebCommon.cs。 wiki documentation for Ninject似乎没有更新,但看起来使用NinjectHttpApplication是一种记录方法,如下所示:

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);
   }
}

答案 1 :(得分:7)

使用最新的Ninject测试: 创建一个空的Web应用程序,然后选择Mvc和Web Api的复选框

安装Nuget包:Ninject.Web.WebApi.WebHost

安装Nuget包:WebActivatorEx

在App_Start中创建一个名为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!"));
         }
     }
 }

在RegisterServices中配置您的DI

向Mvc或Web Api控制器构造函数参数添加依赖性

希望它有所帮助,谢谢。

答案 2 :(得分:4)

如果要在 App_Start 文件夹中自动生成NinjectWebCommon类,则应在 Dependency behavior上的Highest选项的值> NuGet程序包管理器 。 它将下载所有依赖项,包括NinjectWebCommon。 enter image description here