Замок Виндзор с MVC 2.0 и районами - PullRequest
0 голосов
/ 18 сентября 2010

Хотел задать быстрый вопрос касательно замка Виндзор и внедрения IoC для контроллеров в районах.Поддерживает ли Castle 2.5 области MVC 2.0?

Моя конфигурация Castle работает нормально для моего корневого контроллера в корне моего сайта, но никакие контроллеры области не найдены с

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);
    }
}

Большое спасибо

Ричард

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Для тех, кто столкнется с этой проблемой в будущем, у меня есть решение, которое устранило мою проблему. Проблема заключалась в том, что у моих контроллеров не было правильного пространства имен, выделенного для каталога, в котором они находились.

т.е. у меня были tsd.Web.Controllers, а не tsd.Areas.Account.Controllers

Установка пути к пространству имен для сопоставления структуры каталогов решила мою проблему, и замок мог найти контроллер в этой области ...!

Привет

Richard

0 голосов
/ 12 августа 2012

Вы можете вернуться к любому контроллеру, после чего вы сможете получить исключение 404

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

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