鉴于以下设置,我有三个组件。
Web(ASP.NET MVC 3.0 RC1)
模型
持久性(流利的NHibernate,Castle.Windsor)
这是我的ControllerInstaller。
using System;
using System.Web.Mvc;
using Castle;
using Castle.Windsor;
using Castle.MicroKernel;
using Castle.MicroKernel.SubSystems;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
namespace Persistence.Installers
{
public class ControllerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
AllTypes
.FromAssembly(System.Reflection.Assembly.GetExecutingAssembly())
.BasedOn<IController>()
.Configure(c => c.Named(
c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
}
}
}
这是我的ControllerFactory ......
using System;
using System.Web;
using System.Web.Mvc;
namespace Persistence.Containers
{
/// <summary>
/// Utilize Castle.Windsor to provide Dependency Injection for the Controller Factory
/// </summary>
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly Castle.Windsor.IWindsorContainer container;
public WindsorControllerFactory()
{
container = WindsorContainerFactory.Current();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
}
这是Application_Start
文件中的global.asax
..
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
// Register the Windsor Container
ControllerBuilder.Current
.SetControllerFactory(typeof(Persistence.Containers.WindsorControllerFactory));
}
我收到错误
找不到支持服务Project.Web.Controllers.HomeController的组件
在GetControllerInstance
。
所以,我不确定我做错了什么,为什么我不能让控制器注册。
答案 0 :(得分:1)
您的Castle Windsor设置代码都属于您的Web项目。这与持久性无关。
这导致了问题,因为您的ControllerInstaller
正在尝试使用以下代码在Persistence程序集而不是Web程序集中注册控制器:
System.Reflection.Assembly.GetExecutingAssembly()
。
因此,将IoC代码移至Web项目,它将找到您的控制器。