这是史蒂芬桑德森的一本非常好的书
我正在尝试按照第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());
}
}
请帮助..
谢谢..
答案 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