1. ホーム
  2. asp.net-mvc-3

[解決済み] Ninject + MVC3 = InvalidOperationException: シーケンスに要素がない

2023-03-29 20:39:07

質問

MVC3プロジェクトを新規作成し、F5キーを押したところ、サンプルページが表示されました。

それから、NuGet を使って Ninject.MVCエクステンション . Ninjectのドキュメントに従って、global.asaxを修正しました。 MVC3アプリケーションのセットアップ方法 :

public class MvcApplication : NinjectHttpApplication
{
   public static void RegisterGlobalFilters(GlobalFilterCollection filters)
   {
       filters.Add(new HandleErrorAttribute());
   }

   public static void RegisterRoutes(RouteCollection routes)
   {
       routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

       routes.MapRoute(
           "Default", // Route name
           "{controller}/{action}/{id}", // URL with parameters
           new { controller = "Home", action = "Index", 
               id = UrlParameter.Optional });
   }

   protected override IKernel CreateKernel()
   {
       var kernel = new StandardKernel();
       kernel.Load(Assembly.GetExecutingAssembly());
       return kernel;
   }

   protected override void OnApplicationStarted()
   {
       base.OnApplicationStarted();

       AreaRegistration.RegisterAllAreas();
       RegisterGlobalFilters(GlobalFilters.Filters);
       RegisterRoutes(RouteTable.Routes);
   }
}

さて、アプリを実行すると、次のような例外が発生し、イエロー・スクリーン・オブ・デスが表示されます。

InvalidOperationException - Sequence contains no elements.

at System.Linq.Enumerable.Single(...)

at Ninject.Web.Mvc.Bootstrapper.Initialize(...) の67行目です。

そして、案の定 の行は、そのファイルの67 は .Single() を呼び出すので、例外がスローされます。

私は何を間違えているのでしょうか?

どうすればよいのでしょうか?

をインストールした後、気がついたかもしれません。 ninject.mvc3 NuGet をインストールすると App_Start サブフォルダが作成され、その中に NinjectMVC3.cs ファイルが含まれています。このフォルダを削除して、もう一度試してみてください。というわけで、以下は私が行った手順です。

  1. デフォルトのテンプレートを使用して、新しい ASP.NET MVC 3 プロジェクトを作成します。
  2. パッケージ マネージャー コンソール ウィンドウを表示します (表示 -> その他のウィンドウ -> パッケージ マネージャー コンソール)。
  3. タイプ install-package ninject.mvc3 をコマンドラインに入力します。
  4. のデフォルトのコードを置き換えます。 Global.asax をご質問のコードで置き換えてください。
  5. を削除して AppStart サブフォルダを削除します。
  6. アプリケーションを実行する
  7. の美しさをお楽しみください。 /Home/Index のデフォルトページを Google Chrome ウェブブラウザで開きます :-)