Pro ASP.net MVC Framework示例代码不起作用

时间:2010-10-21 14:46:40

标签: c# asp.net asp.net-mvc

这是史蒂芬桑德森的一本非常好的书

我正在尝试按照第4章尝试从本书的代码示例中设置我的mvc代码上的IOC,但它不起作用。

我按照第97页到第101页的代码设置控制反转并运行代码,但是出现以下错误。

打开一个对话框,尝试搜索以下文件:

C:\ TeamCity的\ buildAgent \工作\ 1ab5e0b25b145b19 \ SRC \ Castle.Windsor \温莎\ WindsorContainer.cs

似乎在以下代码行中,controllertype为null:

protected override IController GetControllerInstance(
    System.Web.Routing.RequestContext requestContext, 
    Type controllerType)
{
    return (IController)container.Resolve(controllerType);
}

异常发生在上面的return语句中,说“{”Value不能为null。\ r \ nParameter name:service“}”

这恰好出现在WindsorContainerFactory中。

路线如下:

public class MvcApplication : System.Web.HttpApplication
{
 public static void RegisterRoutes(RouteCollection routes)
 {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Products", action = "List", id = ""} // Parameter defaults
    );
 }

 protected void Application_Start()
 {
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());
 }
}

请帮助..

谢谢..

4 个答案:

答案 0 :(得分:2)

您的方法可能会针对您的应用未提供的请求进行调用。例如,对于favicon.ico。

确保您的controllerType不为空。如果它只是返回null并绕过您添加的代码。

不同类型的浏览器会根据缓存方式向您的网站发出不同的“额外”请求。此外,如果您使用IIS与Visual Studio Dev Server托管该站点,这些可能会在请求到达之前捕获该请求(例如,IIS将服务器提供.jpg文件,而不必放弃您的控制器,但VS Dev Server可能不会)

答案 1 :(得分:1)

答案 2 :(得分:0)

到目前为止,我发现以下链接解决了同样的问题。我在这里复制它们以供我自己参考。

http://forums.asp.net/t/1559062.aspx?Pro+ASP.NET+MVC+-+setting+up+IOC+Castle+Windsor

答案 3 :(得分:0)

首先,我认为如果让相对链接超过绝对链接会更好。

其次,检查您的浏览器。我看到你的代码没有错误。也许不同的浏览器会让它变得更糟。此外,如果您使用IIS与Visual Studio Dev Server托管该站点,则这些可能会捕获该请求。 :d