我有一個新的MVC 2項目使用ninject 2 IOC。我有以下global.asax設置NHibernate和Ninject。代碼運行良好,ninject從程序集中取出控制器(當它執行此操作時,它將它們轉換爲lowe字符串 - 在Ninject源代碼中)。Ninject 2與MVC 2區分大小寫的控制器名稱
我所有的控制器URL現在都區分大小寫,所以/ Home不會解析,但是/ home會解決。
當我使用大寫的第一個字母(MVC中的錯誤)時,出現錯誤「IControllerFactory'Ninject.Web.Mvc.NinjectControllerFactory'沒有返回名稱爲'Home'的控制器。
這是不是很正常?有任何想法嗎?公共類MvcApplication:NinjectHttpApplication { 公共靜態ISessionFactory SessionFactory = CreateSessionFactory();公共類。 public MvcApplication() this.BeginRequest + = new EventHandler(MvcApplication_BeginRequest); this.EndRequest + = new EventHandler(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(),
});
}
}
當我在調試程序,並按照它沿着它發現所有的contollers(目前只是在家庭和帳戶控制器,因爲它是一個新項目)。只是它似乎將它們註冊爲「家庭」和「賬戶」都是小寫字母,所以當我嘗試瀏覽它們時,它會失敗,除非我調整案例。 – Orange 2010-10-04 20:31:40
我相信你知道這一點,但要更清楚RegisterAllControllersIn(Assembly.GetExecutingAssembly());調用子類NinjectHttpApplication的一個方法,這就是Ninject抓取並拉出控制器的原因。 NinjectHttpApplication來自Ninject.Web.Mvc,這是一個讓Ninject與MVC很好地集成的dll。我只是無法弄清楚爲什麼區分大小寫。 – Orange 2010-10-04 20:36:13
啊哈......我在Ninject代碼的MVC2文件夾中查看NinjectHttpApplication的代碼,它顯示RegisterAllControllers只在MVC1文件夾中。我會嘗試使用MVC2代碼/二進制文件,並看看你在哪裏。 – 2010-10-05 14:52:06