Web API2 NinjectWebCommon.cs 没有出现

Web API2 NinjectWebCommon.cs do not appear

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

我是通过 Nuget 安装的,

我还需要安装什么?

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

谢谢

最新的 Ninject.Web.Common.WebHost 3.3.0 NuGet 包似乎不再包含 NinjectWebCommon.cs。旧版本,例如 3.2.0 确实包含此文件。

Ninject.Web.Common.WebHost 3.3.0 提供了一个 NinjectHttpApplication class,您可以从中派生并使用它来代替 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);
   }
}

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

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

安装 Nuget 包:WebActivatorEx

在 App_Start 中创建一个名为 NinjectWebCommon.cs

的 class
 [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控制器构造函数参数

希望对你有帮助,谢谢。

如果您想要在 App_Start 文件夹中自动生成 NinjectWebCommon class,您应该更改 Dependency behavior 的值NuGet 包管理器Highest 的选项。 它将下载所有依赖项,包括 NinjectWebCommon。