MVC 2.0和地区温莎城堡
想要问一个关于温莎城堡和实施IoC的地区控制员的快速问题。 Castle 2.5支持MVC 2.0区域吗?
我的城堡配置对我的根站点中的根控制器工作正常,但没有找到任何区域控制器
IControllerFactory'XXX.Castle.WindsorControllerFactory'没有返回名称'Registration'的控制器。
我直接使用Castle而不是通过MvcContrib
代码如下:
class WindsorControllerFactory : DefaultControllerFactory
{
    WindsorContainer container;
    // The constructor:
    // 1. Sets up a new IoC container
    // 2. Registers all components specified in web.config
    // 3. Registers all controller types as components
    public WindsorControllerFactory()
    {
        // Instantiate a container, taking configuration from web.config
        container = new WindsorContainer();
        // Also register all the controller types as transient
        var controllerTypes =
            from t in Assembly.GetExecutingAssembly().GetTypes()
            where typeof(IController).IsAssignableFrom(t)
            select t;
        foreach (Type t in controllerTypes) {
            //container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
            container.Register(Component.For(t).Named(t.FullName).LifeStyle.Transient);
        }
        container.Install(new WindsorInstaller());
    }
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType != null)
        {
            return (IController)container.Resolve(controllerType);
        }
        return null;// base.GetControllerInstance(requestContext, controllerType);
    }
}
非常感谢
理查德
对于未来遇到此问题的人员,我有解决问题的解决方案。 问题在于我的控制器没有将正确的名称空间分配给他们所在的目录。
即我有tsd.Web.Controllers不tsd.Areas.Account.Controllers
设置名称空间路径来映射目录结构解决了我的问题,然后城堡可以将控制器放置在该区域中!
问候
理查德
你可以返回任何控制器,然后你可以得到异常404
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType != null)
        {
            return (IController)container.Resolve(controllerType);
        }
        return (IController)container.Resolve(typeof(HomeController));
    }
