Я только что добавил пакет nuget Ninject.MVC3 (v2.2.2.0) в мое приложение ASP.NET MVC 3.
Кажется, я настроил свое приложение ASP.NET MVC 3 двумя различными способами:
- Наследуя от
NinjectHttpApplication
в Global.asax.cs
- Загружая
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();
}
}
}