我使用Structuremap进行DI,使用引导程序进行设置:
public class Bootstrapper {
public static void ConfigureDependencies() {
ObjectFactory.Initialize(x => x.AddRegistry<ControllerRegistry>());
}
public class ControllerRegistry : Registry {
public ControllerRegistry(){
For<IService1>().Use<Service1>();
For<IService2>().Use<Service2>();
For<IService3>().Use<Service3>();
}
}
}
在文件&#34; EngineFactory.cs&#34;我有这个:
public class EngineFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {
return ObjectFactory.GetInstance(controllerType) as IController;
}
}
我有两个具有适当视图的控制器:
登录/索引:
这是一个人们可以登录的简单页面。没有什么花哨的,DI也很完美。一旦有人登录,他/她就会被重定向到主页/索引:
主/索引:
这是问题发生的地方。控制器有一个基本控制器,看起来像这样:
public class HomeController : MyBaseController{
public HomeController(IService1 myService) : base(myService){
// Do something cool
}
MyBaseController的代码:
public class MyBaseController: Controller {
public MyBaseController(IService1 myService){
// Do something cools... Please?
}
}
这会给家庭控制器带来错误: 值不能为空。参数名称:key
当我从家用控制器中移除基本控制器(并再次进行构建)时,它可以正常工作。
我搜索了Google和stackoverflow,这是我尝试过的,但没有用:
1 :
try {
return (controllerType == null)
? base.GetControllerInstance(requestContext, controllerType)
: ObjectFactory.GetInstance(controllerType) as IController;
} catch (Exception ex) {
return null;
}
给出错误: IControllerFactory&#39; My.Application.App_Start.EngineFactory&#39;没有为名称&#39; Home&#39;返回控制器。
2 :
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
没效果
第3 :
if (controllerType == null)
return base.GetControllerInstance(requestContext, controllerType);
var controller = ObjectFactory.GetInstance(controllerType);
return (IController)controller;
其他错误: 无法找到来源 /主页
有谁知道如何解决这个问题?
提前致谢