我正在做Empty Web API in Visual Studio 2013
框架4.5。显然NinjectWebCommon.cs
没有出现。
我是通过Nuget安装的,
Ninject.Web.WebApi,
Ninject.web.WebApi.WebHost
但NinjectWebCommon.cs
仍然没有出现。
我还需要安装什么?
我可以手动添加该文件吗?
谢谢
答案 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)