Web API2 NinjectWebCommon.cs不会出现

Empty Web API in Visual Studio 2013 Framework 4.5中执行Empty Web API in Visual Studio 2013 。 显然NinjectWebCommon.cs没有出现。

我通过Nuget安装,

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

  • Ninject.web.WebApi.WebHost

    但是NinjectWebCommon.cs仍然没有出现。

我还需要安装什么?

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

谢谢

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

Ninject.Web.Common.WebHost 3.3.0提供了一个NinjectHttpApplication类,您可以从NinjectWebCommon.cs派生并使用它来代替NinjectWebCommon.cs。 Ninject的wiki文档似乎没有更新,但看起来使用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; } ///  /// Load your modules or register your services here! ///  /// The kernel. private void RegisterServices(IKernel kernel) { // eg kernel.Load(Assembly.GetExecutingAssembly()); } protected override void OnApplicationStarted() { base.OnApplicationStarted(); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } } 

使用最新的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  { 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>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.Bind().To(); RegisterServices(kernel); return kernel; } private static void RegisterServices(IKernel kernel) { //kernel.Bind().ToMethod(ctx => new Repo("Ninject Rocks!")); } } } 

在RegisterServices中配置DI

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

希望它有所帮助,谢谢。

如果要在App_Start文件夹中获取自动生成的NinjectWebCommon类, 则应NuGet包管理器中更改Highest上的Dependency behavior选项的值。 它将下载所有依赖项,包括NinjectWebCommon。 在此处输入图像描述