使用Ninject.MVC3 nuget包正确设置ASP.NET MVC 3应用程序

dev*_*xer 2 asp.net-mvc ninject nuget asp.net-mvc-3

我刚刚将Ninject.MVC3 nuget包(v2.2.2.0)添加到我的ASP.NET MVC 3应用程序中.

我似乎以两种不同的方式设置了我的ASP.NET MVC 3应用程序:

  1. 通过从NinjectHttpApplicationGlobal.asax.cs 继承
  2. 通过加载NinjectModuleRegisterServices在NinjectMVC3.cs方法

而现在我正试图弄清楚这里引用的博客条目.似乎在说还有另一种方法.一些关于.我迷路了.NinjectHttpApplicationModule

我该如何修改NinjectMVC.cs和Global.asax.cs文件?我现在拥有的是粘贴在下面.


NinjectMVC3.cs

[assembly: WebActivator.PreApplicationStartMethod(typeof(TennisClub.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(TennisClub.App_Start.NinjectMVC3), "Stop")]

namespace MyApp.App_Start
{
    using System.Reflection;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    using Ninject;
    using Ninject.Web.Mvc;
    using TennisClub.Configuration;

    public static class NinjectMVC3 
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
            DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
            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();
            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            kernel.Load(new MainModule()); // I added this
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

Global.asax中

namespace MyApp
{
    public class MvcApplication : NinjectHttpApplication // new
    {
        protected override void OnApplicationStarted() // new
        {
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            ModelMetadataProviders.Current = new CustomModelMetadataProvider();
            ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
            DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
        }

        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 = Token.Home, action = Token.Index, id = UrlParameter.Optional }); // Parameter defaults
        }

        protected override IKernel CreateKernel() // new
        {
            return new StandardKernel(new MainModule());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MainModule.cs

namespace MyApp.Configuration
{
    public class MainModule : NinjectModule
    {
        public override void Load()
        {
            Bind<AppSettings>().ToSelf().InSingletonScope();
            Bind<MainDbContext>().ToSelf().InRequestScope();
            Bind<HttpContext>().ToMethod(context => HttpContext.Current);
            Bind<UserInfo>().ToSelf().InRequestScope();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ipr*_*101 5

从GitHub上的Wiki看一下这个页面 -

https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

它贯穿了两种不同的方法,并在过去帮助过我.