安装Ninject.MVC5后App_Start缺失NinjectWebCommon.cs的问题排查
解决MVC5中安装Ninject.MVC5后未生成NinjectWebCommon.cs的问题
嗨 Vikash,这种情况在NuGet包安装过程中偶尔会遇到,通常是模板生成触发失败或者依赖缺失导致的。下面给你几个可行的解决步骤:
一、先排查安装过程中的潜在问题
- 首先打开Visual Studio的输出窗口(菜单→视图→输出),切换到"包管理器"选项卡,重新安装
Ninject.MVC5,看看有没有报错信息。如果有依赖缺失或者安装中断的提示,先解决这些问题(比如手动安装缺失的依赖包)。 - 确认你安装的是正确的包:一定要选择
Ninject.MVC5,而不是Ninject.Web.Common或者其他Ninject衍生包,只有前者会针对MVC5项目生成对应的初始化文件。
二、手动创建NinjectWebCommon.cs文件(最直接的解决方法)
如果自动生成失败,完全可以手动创建这个文件,步骤如下:
- 在你的项目中找到
App_Start文件夹(如果没有就新建一个); - 在该文件夹下新建一个名为
NinjectWebCommon.cs的类文件; - 复制以下代码到文件中,记得把
YourNamespace替换成你项目的实际命名空间:
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourNamespace.App_Start.NinjectWebCommon), "Start")] [assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(YourNamespace.App_Start.NinjectWebCommon), "Stop")] namespace YourNamespace.App_Start { using System; using System.Web; using Microsoft.Web.Infrastructure.DynamicModuleHelper; using Ninject; using Ninject.Web.Common; public static class NinjectWebCommon { private static readonly Bootstrapper bootstrapper = new Bootstrapper(); /// <summary> /// Starts the application /// </summary> public static void Start() { DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); bootstrapper.Initialize(CreateKernel); } /// <summary> /// Stops the application. /// </summary> public static void Stop() { bootstrapper.ShutDown(); } /// <summary> /// Creates the kernel that will manage your application. /// </summary> /// <returns>The created kernel.</returns> private static IKernel CreateKernel() { var kernel = new StandardKernel(); try { kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); RegisterServices(kernel); return kernel; } catch { kernel.Dispose(); throw; } } /// <summary> /// Load your modules or register your services here! /// </summary> /// <param name="kernel">The kernel.</param> private static void RegisterServices(IKernel kernel) { // 在这里添加你的依赖注入注册逻辑,比如: // kernel.Bind<IMyService>().To<MyServiceImpl>().InRequestScope(); } } }
- 完成后,你就可以在
RegisterServices方法中注册你的Web API依赖了,比如绑定接口和实现类。
三、其他可能的排查点
- 检查
App_Start文件夹是否被隐藏:在解决方案资源管理器中点击"显示所有文件"按钮,看看是不是文件夹被隐藏导致看不到生成的文件; - 确认
WebActivatorEx包已安装:Ninject.MVC5依赖这个包来触发初始化文件的生成,如果它缺失,手动安装WebActivatorEx包后再重装Ninject.MVC5试试。
这样应该就能解决你遇到的问题,顺利在MVC5项目中使用Ninject进行依赖注入了。
内容的提问来源于stack exchange,提问作者V.Prasad
相关产品推荐
相关产品推荐

