首页 新闻 会员 周边

构造注入报错:没有为该对象定义无参数的构造函数

0
悬赏园豆:20 [已解决问题] 解决于 2019-06-19 10:25

我知道我写的控制器没有无参构造函数,但是我需要一个有参的构造器,所以只能自定义ControllerFactory类,这其中如何把我的控制器注入到IoC容器中呢?

//我的控制器代码:

public class ShopingCartController : Controller
    {

        protected ICalculator calculator;

        public ShopingCartController(ICalculator _calculator)
        {
            calculator = _calculator;
        }

        public ActionResult Index()
        {....

//我的控制器工厂:
namespace DI.Code
{
    public class MyControllerFactory:DefaultControllerFactory
    {
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null
                ? base.GetControllerInstance(requestContext, controllerType)
                : IoC.Resolve<IController>(controllerType);
        }
    }

    internal class IoC
    {
        internal static T Resolve<T>(Type controllerType)
        {
            //这里把控制器注入到IoC容器不会写
        }
    }
}

//另外控制器工厂注册到Global我也写了:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
刘下来的主页 刘下来 | 小虾三级 | 园豆:919
提问于:2019-04-09 15:33
< >
分享
最佳答案
0

已解决,哈哈哈哈

刘下来 | 小虾三级 |园豆:919 | 2019-04-22 11:53
其他回答(2)
0

加上无参数的构造函数就好了:

public ShopingCartController() { }
三人乐乐 | 园豆:4819 (老鸟四级) | 2019-04-10 10:18

第一:这样写还会报错,因为我后面的程序中需要这个构造传入的参数,而加入了无参构造器,那个有参构造器就不工作了(参数没有传入),导致报错:未将对象引用设置到对象的实例。
第二:如果我的无参构造器如果继承了有参构造器,这样就可以正常运行!但是我的目的没达到,绕了一大圈又回来了,因为我本不想这两个类有任何依赖关系的,还不如用原来写法。。。。

支持(0) 反对(0) 刘下来 | 园豆:919 (小虾三级) | 2019-04-10 15:07
0

.net没用过,但是在JAVA中,Spring的IOC依赖注入的三种方式中的构造器注入可以实现你的需求,不清楚.net是不是一样原理

无恨之都 | 园豆:287 (菜鸟二级) | 2019-04-13 18:35

谢谢你,.net其实也是可以用构造注入的,但是MVC框架中有一个基类中封装了一个方法,就是控制器必须有一个无参的空构造器,如果要使用构造注入,那就必须把基类中那个方法进行扩展,然后把我写的扩展方法注册到启动文件中,我是新手,就是写不出如何扩展。。。。。。

支持(0) 反对(0) 刘下来 | 园豆:919 (小虾三级) | 2019-04-15 09:04

@iiiiiim: “MVC框架中有一个基类中封装了一个方法,就是控制器必须有一个无参的空构造器”,没有这种说法,你从哪看到的?还有,你完全可以换个思路,将ICalculator接口也交给Spring容器管理,然后通过属性注入。

支持(0) 反对(0) 无恨之都 | 园豆:287 (菜鸟二级) | 2019-04-15 19:53

@无恨之都: IDE这样来报错的,我之所以走构造注入,1. 我是初学,所以要弄懂他,其他方式也可以达到目的,这就是我坚持这样做的本意(如果换个方式实现我就不需要发帖子了),2. 我要做到低耦合,让两个类之间没有任何依赖关系

支持(0) 反对(0) 刘下来 | 园豆:919 (小虾三级) | 2019-04-16 08:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册