2010-09-17 102 views
0

想要问一个关于温莎城堡和实施区域控制人员IoC的快速问题。 Castle 2.5支持MVC 2.0区域吗?城堡温莎与MVC 2.0和地区

我的城堡配置工程确定为我的根控制器我的网站的根目录,但任何区域控制器不与

的IControllerFactory“XXX.Castle.WindsorControllerFactory”发现名称为“未返回控制器注册'。

我使用城堡直接而不是通过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); 
    } 
} 

非常感谢

理查德

+0

你使用的是什么WindsorControllerFactory得到异常?如果它是自定义的,请发布代码。如果是MVCContrib,什么版本? – 2010-09-17 23:25:54

+0

以及你如何注册控制器? – 2010-09-18 14:14:32

+0

更新了以前的评论问题..感谢Mauricio – 2010-09-18 19:34:14

回答

2

对于那些谁将来我有一个满足这个问题解决了我的问题。问题是,我的控制器没有分配给他们在目录中的正确的命名空间..

即我有tsd.Web.Controllers不tsd.Areas.Account.Controllers

设置的命名空间路径映射目录结构解决了我的问题,然后城堡可以找到该区域的控制器......!

问候

理查德

+0

嗨理查德,我面临同样的问题。你能否提供一些关于如何设置命名空间路径来映射目录结构的更多细节?非常感谢 – daehaai 2011-07-02 16:58:03

0

您可以返回到任何控制器,那么之后就可以404

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     if (controllerType != null) 
     { 
      return (IController)container.Resolve(controllerType); 
     } 

     return (IController)container.Resolve(typeof(HomeController)); 
    }