MVC4中的结构图和基本控制器:值不能为空

时间:2013-12-01 10:50:55

标签: c# asp.net-mvc-4 structuremap

我使用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;

其他错误: 无法找到来源 /主页

有谁知道如何解决这个问题?

提前致谢

0 个答案:

没有答案