Asp.net Mvc中MVCContrib中无法使用Castle的解决方案
2008-04-15 15:30
1021 查看
在使用Asp.net Mvc MVCContrib中的Castle有时会出现No component for key HomeController was found这样的错误
在看了园子里的《Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案 》这篇文章之后,按文章的方法修改了代码,修改方法如下:
下载MvcContrib源代码,更改MvcContrib.Castle的WindsorControllerFactory.cs中的34行CreateController方法为:
public IController CreateController(RequestContext context, string controllerName)
{
controllerName = controllerName + "Controller"; //更改了这里
IWindsorContainer container = GetContainer(context);
return (IController)container.Resolve(controllerName);
}
这个更改方法可能仅限于MVCContrib 0.0.1.91
这样修改使得MvcContrib.Samples.NVelocityViewFactory这个例子可以正常运行,但另一个例子MvcContrib.Samples.WindsorControllerFactory却出现类似的问题。
因此在MVCContrib的Google论坛里提出了疑问,最后得到了解释:
由于组件名在Windsor是区分大小写的,而ASP.NET MVC里的Controller却是不区分的。如果按上面的代码修改,mysite.com/Home/index 这个地址会正常工作,而mysite.com/home/index将会报错 ,因为home是小写。
因此把组件名强制注册为小写是目前的解决方案,就像修改之前的代码那样:
public IController CreateController(RequestContext context, string controllerName)
{
controllerName = controllerName.ToLower() + "controller"; //更改了这里
IWindsorContainer container = GetContainer(context);
return (IController)container.Resolve(controllerName);
}
不过既然不用修改源代码,那MvcContrib.Samples.NVelocityViewFactory这个例子还是会出错啊,没错,这个例子是存在BUG,不过修改起来很简单。只需修改Global.asax.cs文件的一行代码:
protected virtual void InitializeWindsor()
{
{
{
{
//_container.AddComponentWithLifestyle(type.Name, type, LifestyleType.Transient); //修改前
_container.AddComponentWithLifestyle(type.Name.ToLower(), type, LifestyleType.Transient); //修改后
ControllerBuilder.Current.SetControllerFactory( typeof(WindsorControllerFactory));
}
}
}
}
在看了园子里的《Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案 》这篇文章之后,按文章的方法修改了代码,修改方法如下:
下载MvcContrib源代码,更改MvcContrib.Castle的WindsorControllerFactory.cs中的34行CreateController方法为:
public IController CreateController(RequestContext context, string controllerName)
{
controllerName = controllerName + "Controller"; //更改了这里
IWindsorContainer container = GetContainer(context);
return (IController)container.Resolve(controllerName);
}
这个更改方法可能仅限于MVCContrib 0.0.1.91
这样修改使得MvcContrib.Samples.NVelocityViewFactory这个例子可以正常运行,但另一个例子MvcContrib.Samples.WindsorControllerFactory却出现类似的问题。
因此在MVCContrib的Google论坛里提出了疑问,最后得到了解释:
由于组件名在Windsor是区分大小写的,而ASP.NET MVC里的Controller却是不区分的。如果按上面的代码修改,mysite.com/Home/index 这个地址会正常工作,而mysite.com/home/index将会报错 ,因为home是小写。
因此把组件名强制注册为小写是目前的解决方案,就像修改之前的代码那样:
public IController CreateController(RequestContext context, string controllerName)
{
controllerName = controllerName.ToLower() + "controller"; //更改了这里
IWindsorContainer container = GetContainer(context);
return (IController)container.Resolve(controllerName);
}
不过既然不用修改源代码,那MvcContrib.Samples.NVelocityViewFactory这个例子还是会出错啊,没错,这个例子是存在BUG,不过修改起来很简单。只需修改Global.asax.cs文件的一行代码:
protected virtual void InitializeWindsor()
{
{
{
{
//_container.AddComponentWithLifestyle(type.Name, type, LifestyleType.Transient); //修改前
_container.AddComponentWithLifestyle(type.Name.ToLower(), type, LifestyleType.Transient); //修改后
ControllerBuilder.Current.SetControllerFactory( typeof(WindsorControllerFactory));
}
}
}
}
相关文章推荐
- Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案
- Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案
- Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- asp.net mvc下使用xheditor上传文件无法保存的解决方案
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- Asp.net Mvc 中使用Repeater的6种解决方案
- (WebSite----Asp.Net Configuration----->无法连接到SQL Server数据库------>选择数据存储区---->应用程序当前被配置为使用提供程序:AspNetSqlProvider)解决方案
- Asp.net MVC使用KindEditor 4.X无法取到textarea的值
- asp.net mvc 发布到iis上无法访问资源解决方案
- ASP.NET 使用LinkButton做登录按钮时,回车无法提交解决方案
- Asp.net Mvc 中使用Repeater的6种解决方案
- 安装了asp.net MVC后无法显示文件模板的解决方案
- Asp.net Mvc 中使用Repeater的6种解决方案
- IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称
- ASP.NET 4.5 MVC 4 无法在Windows2008的IIS7.0上解决方案
- ASP.NET 4.5 MVC 4 无法在Windows2008的IIS7.0上解决方案
- 工作中的问题解决 -- (win2003 asp.net) Session和带页面回传的方法无法正常使用解决方案