У меня есть новый проект MVC 2, использующий ninject 2 для IOC. У меня есть следующий global.asax, который устанавливает как NHibernate, так и Ninject. Код работает нормально, ninject извлекает контроллеры из сборки (когда это происходит, он преобразует их в строки нижнего регистра - внутри исходного кода Ninject).
Все URL-адреса моих контроллеров теперь чувствительны к регистру, поэтому / Home не разрешится, но / home будет.
Когда я использую первую букву в верхнем регистре (по умолчанию в MVC), я получаю сообщение об ошибке «IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' не вернул контроллер для имени 'Home'».
Что ж, это ненормально? Любые идеи?
открытый класс MvcApplication: NinjectHttpApplication {общедоступный статический ISessionFactory SessionFactory = CreateSessionFactory (); общедоступный MvcApplication () {this.BeginRequest + = новый обработчик событий (MvcApplication_BeginRequest); this.EndRequest + = новый обработчик событий (MvcApplication_EndRequest); }
void MvcApplication_BeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
void MvcApplication_EndRequest(object sender, EventArgs e)
{
CurrentSessionContext.Unbind(SessionFactory).Dispose();
}
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 } // Parameter defaults
);
}
private static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, @"Data Source=.\;Initial Catalog=xxxxxx;Integrated Security=true;");
//cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, System.Environment.MachineName);
NHibernateProfiler.Initialize();
return cfg.BuildSessionFactory();
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
protected override IKernel CreateKernel()
{
return new StandardKernel(new INinjectModule[] {
new ServiceModule(),
});
}
}