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

2019-06-19 10:19发布

问题:

我知道我写的控制器没有无参构造函数,但是我需要一个有参的构造器,所以只能自定义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());

回答1:

已解决,哈哈哈哈



回答2:

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

public ShopingCartController() { }


回答3:

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