Правильная настройка приложения ASP.NET MVC 3 с помощью пакета Ninject.MVC3 nuget - PullRequest
2 голосов
/ 04 октября 2011

Я только что добавил пакет nuget Ninject.MVC3 (v2.2.2.0) в мое приложение ASP.NET MVC 3.

Кажется, я настроил свое приложение ASP.NET MVC 3 двумя различными способами:

  1. Наследуя от NinjectHttpApplication в Global.asax.cs
  2. Загружая NinjectModule в методе RegisterServices в 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
        }        
    }
}

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());
        }
    }
}

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();
        }
    }
}

1 Ответ

5 голосов
/ 04 октября 2011

Посмотрите на эту страницу из Wiki на GitHub -

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

Он проходит через оба подхода и помог мне в прошлом.

...