找不到支持服务 HomeController 的组件 - Castle Windsor 错误

No component for supporting the service HomeController was found - Castle Windsor error

我读了 this 关于 Casle Windsor 的文章。所以我有 classes BusinessLogicInstaller.cs、ControllersInstaller、IocContainer 和 WindsorControllerFactory。这是示例:

public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(AllTypes.FromThisAssembly()
            .Pick().If(t => t.Name.EndsWith("Controller"))
            .Configure(configurer => configurer.Named(configurer.Implementation.Name))
            .LifestylePerWebRequest());
    }
}

public class BusinessLogicInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(
            Component
            .For<IUser>()
            .ImplementedBy<User>());
    }
}

public static class IocContainer
{
    private static IWindsorContainer _container;

    public static void Setup()
    {
        _container = new WindsorContainer().Install(FromAssembly.This());

        WindsorControllerFactory controllerFactory = new WindsorControllerFactory(_container.Kernel);
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);
    }
}

public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IKernel _kernel;

    public WindsorControllerFactory(IKernel kernel)
    {
        this._kernel = kernel;
    }

    public override void ReleaseController(IController controller)
    {
        _kernel.ReleaseComponent(controller);
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
        }
        return (IController)_kernel.Resolve(controllerType);
    }
}

在Global.asaxclass我有

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        // Add this line to Application_Start in Global.asax.cs to setup the IoC Container.
        IocContainer.Setup();
    }
}

问题出在classWindsorControllerFactory.cs这行代码:

return (IController)_kernel.Resolve(controllerType);

错误是找不到支持服务 Controllers.HomeController 的组件。哪里出错了?

我找到了解决方案...首先,我没有提到我的 MVC 项目中的一个重大差异(因为我不知道为什么那么重要)- 我有单独的控制器程序集。所以,ControllerInstallers.cs中的这部分代码有错误:

.FromThisAssembly()

应该是:

.FromAssemblyNamed("Controllers")

我不得不对@Jan Muncinsky 表示感谢,因为你的回答以及你对 class 问题所在的提示。