工作之後,似乎是針對MVC 3.0和Castle.Windsor
我碰到一個有點障礙的樣本 - 我知道一個解決辦法,但我真搞不清楚什麼現在要做的'最佳實踐'。城堡的ControllerFactory樣品不與MVC地區
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
應用程序,具有地區參與。 controllerName在那裏不起作用。
在其他的ControllerFactory實現我所看到的,人們使用overrided方法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
?任何信息都被過度讚賞。
IoC的整合從MvcContrib去除ASP.NET MVC 3 – 2011-02-15 15:27:30