C# Web API2 NinjectWebCommon.cs不显示

C# Web API2 NinjectWebCommon.cs不显示,c#,asp.net,asp.net-web-api,nuget,ninject,C#,Asp.net,Asp.net Web Api,Nuget,Ninject,我正在Visual Studio 2013中执行一个空Web APIFramework 4.5。显然,NinjectWebCommon.cs不会出现 我通过Nuget安装 Ninject Ninject.Web.Common Ninject.MVC5 Ninject.Web.Common.WebHost Ninject.Web.WebApi Ninject.web.WebApi.WebHost 但是NinjectWebCommon.cs仍然没有出现 我还需要安装什么 我可以手动添

我正在Visual Studio 2013中执行一个
空Web API
Framework 4.5。显然,
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软件包不再包含Ninject.webcommon.cs。旧版本(如3.2.0)确实包含此文件

Ninject.Web.Common.WebHost 3.3.0提供了一个NinjectHttpApplication类,您可以从该类派生并使用它来代替NinjectWebCommon.cs。似乎尚未更新,但使用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);
   }
}
public类mvcapapplication:NinjectHttpApplication
{
公共静态无效注册表全局过滤器(全局过滤器集合过滤器)
{
filters.Add(新HandleErrorAttribute());
}
公共静态无效注册表项(路由收集路由)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
routes.MapRoute(
“默认值”,//路由名称
“{controller}/{action}/{id}”,//带参数的URL
新的
{
controller=“Home”,
action=“Index”,
id=UrlParameter。可选
});
}
受保护的覆盖IKernel CreateKernel()
{
var kernel=新的标准内核();
注册服务(内核);
返回内核;
}
/// 
///在这里加载您的模块或注册您的服务!
/// 
///内核。
私有无效注册服务(IKernel内核)
{
//例如kernel.Load(Assembly.getExecutionGassembly());
}
Application Started()上受保护的覆盖无效
{
base.on应用程序启动();
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
}

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

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

安装Nuget软件包:WebActivatex

在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!"));
         }
     }
 }
[程序集:WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon),“开始”)]
[程序集:WebActivateX.ApplicationShutdownMethodAttribute(typeof(NinjectWebCommon),“停止”)]
名称空间
{
公共静态类NinjectWebCommon
{
私有静态只读引导程序Bootstrapper=new Bootstrapper();
公共静态void Start()
{
RegisterModule(typeof(OnePerRequestHttpModule));
RegisterModule(typeof(NinjectHttpModule));
初始化(CreateKernel);
}
公共静态无效停止()
{
bootstrapper.ShutDown();
}
私有静态IKernel CreateKernel()
{
var kernel=新的标准内核();
kernel.Bind().ToMethod(ctx=>()=>newbootstrapper().kernel);
kernel.Bind().To();
注册服务(内核);
返回内核;
}
私有静态无效注册服务(IKernel内核)
{
//ToMethod(ctx=>newrepo(“Ninject Rocks!”);
}
}
}
在RegisterServices中配置DI

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


希望对您有所帮助,谢谢。

如果您想在App_Start文件夹中获得自动生成的
NinjectWebCommon
类,您应该在NuGet Package Manager中更改
依赖行为的
选项的值。
它将下载所有依赖项,包括NinjectWebCommon。

我不知道如何解决依赖关系。@Alisson您只需将依赖关系添加到RegisterServices函数中即可。ie kernel.Bind().To();对于web api控制器中的注入,将此行添加到CreateKernel方法:System.web.Http.GlobalConfiguration.Configuration.DependencyResolver=new Ninject.WebApi.DependencyResolver.NinjectDependencyResolver(内核);这对我很有吸引力。我仍然不清楚他们为什么不自动加入这个。我在上面看到了在MVC中继承NinjectHttpApplication的方法,但是从我看到的WebApi的行为有点不同。等我有时间的时候再调查。再次感谢。对于Ninject.MVC5.3.3.0,答案对我不起作用。。。VS 2017不适合我使用Ninject.MVC5.3.3.0 VS2019 16.2,但我刚刚看到文件创建到文件夹中,但没有包含到项目中。其他人也有同样的问题吗?我对Ninject.Web.WebAPI.3.3.1的回答不适用。。。VS 2019 v16.4.2