Castle ControllerFactory Образцы, которые не работают с областями MVC - PullRequest
1 голос
/ 15 февраля 2011

Следуя примерам, которые, похоже, нацелены на MVC 3.0 и Castle.Windsor, я наткнулся на небольшую загадку - я знаю обходной путь, но я действительно растерялся из-за того, что сейчас делать с «лучшей практикой».

http://stw.castleproject.org/(S(su2mgm45fclhqe55veo40545))/Windsor.MainPage.ashx

В этом примере автор создает WindsorControllerFactory. [http://stw.castleproject.org/(S(su2mgm45fclhqe55veo40545))/Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx]

Вот код, который он использует ...

public class WindsorControllerFactory: DefaultControllerFactory
{
    private readonly IKernel kernel;

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

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

    public override IController CreateController(RequestContext requestContext, string controllerName)
    {
        var controllerComponentName = controllerName + "Controller";
        return kernel.Resolve<IController>(controllerComponentName);
    }
}

Так вот, это работает ... вроде. Проблема возникает в любом приложении ASP.NET MVC, в котором задействовано Области . Имя контроллера не работает там.

В других реализациях ControllerFactory, которые я видел, люди используют переопределенный метод GetControllerInstance таким способом ...

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
            throw new HttpException(404, string.Format("The controller for path '{0}' could not be found or it does not implement IController.", requestContext.HttpContext.Request.Path));

        return (IController)_container.Resolve(controllerType);
    }

Так что я в замешательстве. Что считается лучшим подходом? CreateController или GetControllerInstance?

И прежде чем кто-нибудь запустит MVCContrib - я его изучил, и чтобы быть очень откровенным, я должен быть либо смехотворно глупым, либо просто упустить момент, потому что я даже не могу найти в нем ControllerFactory - и в бинарные файлы, которые я скачал для этого, я не мог ничего связать. Я понимаю, что этот проект очень хороший, не бросая его, но я вижу, что на него часто ссылаются, и я не могу найти то, о чем говорят люди.

Может кто-нибудь помочь мне разгадать эту тайну? Почему автор этого урока показал нам ControllerFactory, который не будет работать с областями? Как это можно сделать, чтобы работать с ними? Почему некоторые используют CreateController, а некоторые используют GetControllerInstance? Любая информация чрезвычайно ценится.

1 Ответ

1 голос
/ 15 февраля 2011

На самом деле ты прав.Существующая реализация была в норме в MVC за 1 день до введения областей.В настоящее время метод GetControllerInstance должен быть переопределен, чтобы приспособиться к этому.Не стесняйтесь исправить это и отправьте запрос на извлечение.

...