asp.net MVC 2自定义控制器工厂被调用两次,第二次controllerType为null
本文关键字:两次 第二次 null controllerType MVC net 自定义 控制器 调用 工厂 asp | 更新日期: 2023-09-27 18:14:02
我创建了一个自定义控制器工厂,以便能够使用StructureMap向我的控制器注入服务实例。
一切都工作得很好,除了每个请求控制器工厂第一次被调用时,它正确地解析了控制器,第二次被调用时,controllerType参数为空,所以StructureMap的GetInstance方法抛出一个ArgumentNullException: Value不能为空。参数名称:key
应用程序实际上不会崩溃,但如果我正在调试,它总是停在那里,我必须手动继续执行,以便显示视图。
谁能解释一下为什么会发生这种情况,我该如何解决?
下面是我的Global。Asax和控制器工厂:
控制器工厂:public class IocControllerFactory : DefaultControllerFactory
{
private readonly IContainer container;
public IocControllerFactory(IContainer container)
{
if(container == null) throw new ArgumentNullException("container");
this.container = container;
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return this.container.GetInstance(controllerType) as IController;
}
}
Global.asax
private void RegisterControllerFactory()
{
var ioc = new Container();
var controllerFactory = new IocControllerFactory(ioc);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
ioc.Configure(r =>
r.Scan(x =>
{
x.AssemblyContainingType<UserAccountController>();
x.AddAllTypesOf<IController>();
x.Include(t => typeof(IController).IsAssignableFrom(t));
}
));
ioc.Configure(r => r
.For<IUserAccountService>()
.Use<UserAccountService>());
}
非常感谢您的帮助
. NET MVC用默认配置将每个没有映射到控制器工厂文件的请求都打了出来。大多数浏览器默认会请求一个favicon.ico文件。所以,发生的事情是你的图标被调用,但没有映射到一个类型,所以StructureMap得到一个空类型和错误。