Следуя примерам, которые, похоже, нацелены на 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
? Любая информация чрезвычайно ценится.