Подтвердить что ты не робот

MVC: для этого объекта не задан конструктор без параметров

У меня есть следующее определение контроллера

public class FeaturedAccommodationController : Controller
{
   ...

   public FeaturedAccommodationController(IAccommodationService accommodationService)
   {
      ...
   }

   public ActionResult Index(int page = 1)
   {
      ...
   }
   ...
}

У меня есть ссылка, которую я использую, чтобы вызвать этот метод действия индекса

@Html.ActionLink("Featured Accommodations", "Index", "FeaturedAccommodation")

По какой-то причине, когда я нажимаю на эту ссылку, я получаю следующую ошибку. В чем проблема?

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 'JattCore.UI.Admin.Controllers.FeaturedAccommodationController'. 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() +8970356
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
4b9b3361

Ответ 1

Когда вы создаете свой контроллер, ему нужно в конструкторе параметр, называемый IAccommodationService.
Если вы этого не сделаете, вы не сможете создать контроллер.

Один из способов решения проблемы - использовать инжекцию зависимостей (DI)/инверсию управления (IoC), такую ​​как ninject или подобное.
Если у вас есть, то не забудьте зарегистрировать IAccommodationService...

Ответ 2

Добавьте constructor без параметров для вашего контроллера

public class FeaturedAccommodationController : Controller
{
   public FeaturedAccommodationController ()
   {
   }
   // your other parameterized constructors and action methods here
}

Ответ 3

Проблема заключается в том, что указано в сообщении об ошибке, нет конструктора без параметров по умолчанию (например):

public FeaturedAccommodationController()
{
}

Время выполнения MVC не может создать экземпляр вашего контроллера, поскольку он не может обеспечить реализацию IAccommodationService. Вам нужно либо сделать инъекцию конструктора бедных, как это:

public FeaturedAccommodationController()
    : this(new AccommodationService())
{
}

public FeaturedAccommodationController(IAccommodationService accommodationService)
{
}

или использовать контейнер IOC (например, Unity, Ninject, Windsor и т.д.), который может создавать ваши контроллеры и разрешать их зависимости.

Ответ 4

Ваш вопрос - почти точный дубликат этого вопроса:

Windows Azure, MVC3, Без конструктора без параметров для этого объекта

Ваша трассировка ошибок даже указывает на проблему:

[InvalidOperationException: Произошла ошибка при попытке создать контроллер типа "JattCore.UI.Admin.Controllers.FeaturedAccommodationController". Убедитесь, что у контроллера нет конструктора без параметров.]

Ответ 5

Вы можете использовать встроенную функцию ASP.NET MVC путем реализации DefaultControllerFactory и установить ее с помощью ControllerBuilder.Current.SetControllerFactory

Ответ 6

  • Остановить IIS
  • Удалить C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
  • Запустите IIS

Ответ 7

Одна из причин этого может случиться, потому что это ваш первый и единственный контроллер в вашем приложении. Мое предложение имеет контроллер по умолчанию, который называется Home без конструктора (как указано в нем), а затем добавляет еще один контроллер - тот, который вы упомянули, который может иметь конструктор.