如果您正在使用 Steven Sanderson 的书 Pro ASP.Net MVC Framework,那么您需要对 WindsorControllerFactory 类进行更改以使用 DefaultControllerFactory 公开的接口。此类已在 MVC 2 Preview 2 中进行了更新。谁知道最终版本将包含什么内容。
改变:
protected override IController GetControllerInstance(Type controllerType)
到:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
我还发现有必要确保 MVC 2 Preview 2 框架没有传入非控制器类(它意外地将 favicon.ico 作为 controllerType 传入)。所以更新后的 GetControllerInstance 方法如下所示:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
//Debug.Print("Controller: {0}, Action: {1}", requestContext.RouteData.Values["Controller"], requestContext.RouteData.Values["Action"]);
if (controllerType == null)
{
//Debug.Print("Is IController: {0}", (controllerType is IController));
//Debug.Print("Is null: {0}", (controllerType == null));
return null;
}
else
{
return (IController)container.Resolve(controllerType);
}
}
我将调试代码留在了那里,以防您有兴趣了解为什么在 WindsorControllerFactory 中出现“值不能为空”错误。
进行此更改后,温莎开始为我工作。希望这会有所帮助。
干杯,杰森