首页 新闻 搜索 专区 学院

MVC Controller Factory没有为该对象定义无参数的构造函数。

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-04-02 09:52

Controller Factory是用来创建控制器。而Controller最常用的场景之一是支持依赖注入。但是如果直接在控制器中使用依赖注入,默认情况下asp.net mvc框架将不会为你创建Controller,而且你还会得到下面这个错误,如下图:

下面是我的两个代码请帮忙看看是哪出问题了

问题补充:

我看了陈钊前辈的帖子

http://www.cnblogs.com/chenzhao/articles/2081813.html

可是按照他说的改了没好用啊!!

RockBoy的主页 RockBoy | 初学一级 | 园豆:123
提问于:2013-02-06 10:13
< >
分享
所有回答(1)
0

没看到依赖注入 创建 控制器,你重写的创建控制器的工厂照样是 一样的那个base......... 没有问题?应该要加上解析的对象吧,如:

 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null
                ? base.GetControllerInstance(requestContext, controllerType)
                : IoC.Resolve<IController>(controllerType);
        }

再把你的 各个具体的控制器注册到ioc容器中。

Qlin | 园豆:2403 (老鸟四级) | 2013-02-06 10:24

两个问题不明白 IoC.Resolve<IController>(controllerType); 这个IOC容器从哪来的?

如何注册ioc容器,谢谢!

支持(0) 反对(0) RockBoy | 园豆:123 (初学一级) | 2013-02-06 10:35

@RockBoy: 

1.只是假设, 依赖注入容器,你没有,那你怎么 依赖注入?

2.只是想说 重写的工厂里,应该要有你自己创建控制器的方法。不能 你的有参数的构造函数的控制器 怎么new,怎么构造,什么时候构造。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-02-06 10:39

@Qlin:  protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {        
            return controllerType == null
                ? base.GetControllerInstance(requestContext, controllerType)
                : (IController)ninjectKernel.Get(controllerType);
        }

这个不就是我自定义的一个控制器吗?不要意思 不明白你的意思那我这个应该怎么改呢?

支持(0) 反对(0) RockBoy | 园豆:123 (初学一级) | 2013-02-06 10:46

@RockBoy: 

上面不是 没你这样写不? 写了还问我为啥要这样?

如果写了,就看你的 有没有注册了相应的控制器了,应该是 构造函数注入吧。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-02-06 10:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册