我需要找到一種方法將我的MVC控制器放入與MVC項目不同的項目中。ASP.NET MVC控制器在單獨集合和Castle Windsor
我想我很近。我已經安裝了Castle Windsor IoC容器,並將我的控制器安裝在不同的項目中。我認爲它掛在Web.Config上。是否有我需要添加的組件?這是當前異常我越來越:
用於支持 服務 MySolution.Express.Controllers.HomeController 的成分,不被發現
這裏是我的代碼:
Web.Config部分屬於溫莎城堡
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
Castle.Windsor" />
</configSections>
(....)
<castle>
<components>
</components>
</castle>
Global.ascx
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
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());
ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.Express.Controllers");
}
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);
}
- 有我需要添加的成分?
- 我還能做些什麼來實現這個目標?
您正在使用哪個版本?你爲什麼不使用Windsor的註冊API來註冊控制器? – 2010-07-20 01:17:28