最近我尝试使用 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 方法被调用了两次。第一次调用时,正确的 controllerType 被传递进去,但第二次调用时它总是 null。
第一次调用 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());
}
我非常热衷于让依赖注入正常工作,并且如果有人能帮助我,我将不胜感激。:)