asp.net - 未定义无参数构造函数对象

标签 asp.net asp.net-mvc asp.net-mvc-3 dependency-injection ninject

我知道这是一个重复的问题,但我找不到错误的答案。 我试图显示数据库中保存的房间列表,但出现下一个错误:

 Server Error in '/' Application.
  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) +98
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67

   [InvalidOperationException: An error occurred when trying to create a controller of type 'HotelProjectFinal.Controllers.RoomController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +232
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
     System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8969412
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

但是我有一个没有参数的构造函数:

 namespace HotelProjectFinal.Controllers
 {
     public class RoomController : Controller
     {
         private IRoomRepository repository;

         public RoomController(IRoomRepository roomRepository) 
         {
             repository = roomRepository;
         }

         public ViewResult List()
         {
             return View(repository.Rooms);
         }
     }
}

我的观点是:

  @model IEnumerable<HotelProjectFinal.Models.Room>

   @{
   ViewBag.Title = "List";
    }

    @foreach (var p in Model)
    {
       <div class="item">
        <h3>@p.Room_number</h3>
       @p.Room_Type
       <h4>@p.Room_Type.Price.ToString("c")</h4>
      </div>
      }

我正在使用ninject:

               public class NinjectControllerFactory : DefaultControllerFactory
            {
    private IKernel ninjectKernel;
    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }
    protected override IController GetControllerInstance(RequestContext requestContext,
    Type controllerType)
    {
        return controllerType == null
        ? null
        : (IController)ninjectKernel.Get(controllerType);
    }
    private void AddBindings()
    {
        ninjectKernel.Bind<IRoomRepository>().To<EFRoomRepository>();
    }
          }
            }

最佳答案

您已经有了一个 Controller 工厂,但堆栈跟踪没有提及任何有关 Ninject 的信息,这表明您忘记告诉 MVC 相关信息。

您可以通过添加一行来告诉它来解决这个问题。

但是,推荐的做法是通过 adding a NuGet reference to Ninject.MVC3 Hook Ninject 。相关的Ninject MVC3 wiki上有关于它的文档。 .

关于asp.net - 未定义无参数构造函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916012/

相关文章:

asp.net - 当 .NET 中发生部分回发时,用户控件中的 JavaScript 不会触发

javascript - 如何在asp中获取表行的n个数字输入类型的值?

c# - ASP.NET MVC : removing item from a list in a nested structure always removes the last item 中的异常行为

c# - 解决歧义

javascript - 如何修改Javascript异常

asp.net - 如何为所有下拉菜单应用焦点 CSS?

asp.net - Microsoft EDGE - 访问此资源所需的安全证书无效

asp.net-mvc - Grid.Mvc 缺少文档

asp.net - 是否存在用于 asp.net 的 RAD?

c# - View 中具有自定义模型属性的 MVC3 默认成员属性(使用 ModelView?)