2010-09-17 129 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)); 
    }