没有为此对象为MVC Controller定义无参数构造函数

时间:2019-06-14 09:15:14

标签: asp.net-mvc model-view-controller constructor ninject

如您所见,我有这个控制器:

@foreach($sells as $sell) 
    {{ $sell->orders }} //for orders.
    {{ $sell->products }} //for product
    @foreach($sell->orders as $order)
        {{ $order->product }} //single product
    @endforeach
@endforeach

当我调用索引操作时,出现此错误:

namespace Web.Front.Controllers
{
    public class CarController : Controller
    {
        ICarService _CarService;
        public  CarController(ICarService carService)
        {
            _CarService = carService;
        }

        // GET: Car

        public ActionResult Index()
        {

            return View();
        }
    }
}

请注意,我正在使用ninject向控制器注入服务。当我从构造函数中删除该服务时,就会起作用。

ninject代码:

 No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +119
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +83
   System.Activator.CreateInstance(Type type) +11
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +55

[InvalidOperationException: An error occurred when trying to create a controller of type 'Web.Front.Controllers.CarController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +178
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +102
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +184
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159

1 个答案:

答案 0 :(得分:0)

mvc需要无参数的构造。 如果没有构造函数,.Net运行时将自动创建无参数的构造,否则,如果您具有带参数的构造,则运行时不要这样做并引发错误。

在每个控制器上创建新的carService,或者使用serviceProvider。 使用服务提供者,单元测试很简单。 使用asp.net核心很容易enter link description here,如果您使用的是mvc 4或5,则可以在此处看到示例enter link description here