14

次のコントローラー定義があります

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
4

7 に答える 7

12

コントローラーを作成するときは、コンストラクターに というパラメーターが必要IAccommodationServiceです。
そうしないと、コントローラーを作成できません。

この問題を解決する 1 つの方法は、ninject などの依存性注入 (DI)/制御の反転 (IoC) を使用することです。
持っている場合は、忘れずに登録してくださいIAccommodationService...

于 2012-09-26T15:44:46.963 に答える
10

constructorコントローラーにパラメーターなしでa を追加します

public class FeaturedAccommodationController : Controller
{
   public FeaturedAccommodationController ()
   {
   }
   // your other parameterized constructors and action methods here
}
于 2012-09-26T15:45:13.120 に答える
5

問題はまさにエラーメッセージの状態です。デフォルトのパラメーターなしのコンストラクターはありません(例):

public FeaturedAccommodationController()
{
}

の実装を提供できないため、MVC ランタイムはコントローラーをインスタンス化できませんIAccommodationService。次のように、貧しい人のコンストラクター注入を行う必要があります。

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

public FeaturedAccommodationController(IAccommodationService accommodationService)
{
}

または、コントローラーを構築して依存関係を解決できる IOC コンテナー (Unity、Ninject、Windsor など) を使用します。

于 2012-09-26T15:47:06.893 に答える
1

あなたの質問は、この質問のほぼ正確な複製です:

Windows Azure、MVC3、このオブジェクトにパラメーターなしのコンストラクターが定義されていません

あなたのエラートレースは問題を指摘しています:

[InvalidOperationException: タイプ 'JattCore.UI.Admin.Controllers.FeaturedAccommodationController' のコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリック コンストラクターがあることを確認してください。]

于 2012-09-26T15:45:06.777 に答える
1
  • IIS を停止する
  • 消去C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
  • IIS を起動
于 2015-01-24T12:29:04.083 に答える
0

これが発生する理由の 1 つは、これがアプリケーション内の最初で唯一のコントローラーであるためです。私の提案は、ホームと呼ばれるデフォルトのコントローラーをコンストラクターなしで(エラー状態として)作成し、別のコントローラーを追加することです。これは、コンストラクターを持つことができるコントローラーです。

于 2016-02-03T23:58:08.950 に答える