【发布时间】:2009-04-05 20:55:13
【问题描述】:
我最近尝试使用 StructureMap 实现依赖注入。我设法一直遵循该示例,但每次尝试运行应用程序时都会遇到抛出的异常。这是我的控制器工厂的一些代码 sn-ps。
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());
}
我非常渴望让依赖注入工作,如果有人能帮助我,我将不胜感激。 :)
【问题讨论】:
-
老兄,我遇到了完全相同的问题。
-
如何注册控制器?
-
我认为你应该抛出一个404 http exception
标签: asp.net-mvc dependency-injection structuremap