我最近尝试使用 StructureMap 实现依赖注入。我设法一直遵循该示例,但每次尝试运行应用程序时都会遇到抛出的异常。这是我的控制器工厂的一些代码片段。
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
throw new ArgumentNullException("controllerType");
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
我的 Global.asax 调用了一个静态 BootStrapper 类,它注册了我的所有依赖项,但看起来 StructureMapControllerFactory 的 GetControllerInstance 被调用了两次。第一次调用时,传入了一个正确的控制器类型,但在第二次调用时它始终为空。
第一次调用 GetControllerInstance 时,类型设置为 HomeController 是正确的。HomeController 中触发的代码并返回 View()。在 View() 返回时,在 aspx 文件上调用 Page_Load 事件。完成之后,它到达了一行:
httpHandler.ProcessRequest(HttpContext.Current);
这就是第二次调用 GetControllerInstance 的地方。
这是我可能相关的 Global.asax 位:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
Bootstrapper.ConfigureStructureMap();
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
我非常渴望让依赖注入工作,如果有人能帮助我,我将不胜感激。:)