Asp.net mvc 2 ASP.NET MVC控制器在单独的assembies和Castle Windsor中
我需要找到一种方法,将我的MVC控制器放入与MVC项目不同的项目中 我想我很接近了。我已经设置了Castle Windsor IoC容器,并将我的控制器放在另一个项目中。我想它挂在Web.Config上了。是否有需要添加的组件?以下是我得到的当前例外情况: 没有用于支持系统的组件 服务 MySolution.Express.Controllers.HomeController 被发现 这是我的密码: 属于温莎城堡的Web.Config部分Asp.net mvc 2 ASP.NET MVC控制器在单独的assembies和Castle Windsor中,asp.net-mvc-2,castle-windsor,ioc-container,Asp.net Mvc 2,Castle Windsor,Ioc Container,我需要找到一种方法,将我的MVC控制器放入与MVC项目不同的项目中 我想我很接近了。我已经设置了Castle Windsor IoC容器,并将我的控制器放在另一个项目中。我想它挂在Web.Config上了。是否有需要添加的组件?以下是我得到的当前例外情况: 没有用于支持系统的组件 服务 MySolution.Express.Controllers.HomeController 被发现 这是我的密码: 属于温莎城堡的Web.Config部分 <section name="castle"
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
Castle.Windsor" />
</configSections>
(....)
<castle>
<components>
</components>
</castle>
WindsorControllerFactory.cs
WindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(
new XmlInterpreter(new ConfigResource("castle"))
);
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
foreach (Type t in controllerTypes)
container.AddComponentWithLifestyle(t.FullName,t,
LifestyleType.Transient);
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
- 是否有需要添加的组件
- 我还能做些什么来实现这个目标
- 好的,我知道了。下面是Web.Config组件:
<component id="controller" type="MyProject.Express.Controllers.HomeController, MyProject.Express.Controllers" lifestyle="transient" />
好的,我知道了。下面是Web.Config组件:
<component id="controller" type="MyProject.Express.Controllers.HomeController, MyProject.Express.Controllers" lifestyle="transient" />
用于注册控制器的代码正在查看正在执行的程序集,因此它找不到控制器。正如您所发现的,一种解决方案是显式注册控制器 或者,如果使用MvcContrib.Castle,则可以使用类似以下内容替换WindsorController Factory构造函数中的第二行代码,以注册控制器程序集中的所有控制器:
container.RegisterControllers(typeof(HomeController).Assembly);
用于注册控制器的代码正在查看正在执行的程序集,因此它找不到控制器。正如您所发现的,一种解决方案是显式注册控制器 或者,如果使用MvcContrib.Castle,则可以使用类似以下内容替换WindsorController Factory构造函数中的第二行代码,以注册控制器程序集中的所有控制器:
container.RegisterControllers(typeof(HomeController).Assembly);
您使用的是哪个版本?为什么不使用Windsor的注册API来注册控制器?您使用的是哪个版本?为什么不使用Windsor的注册API来注册控制器?