26

新しい MVC Web アプリケーションを作成しました。Ninject.dll、Ninject.Web.Common.dll、および Ninject.Web.MVC.dll への参照があります。

Global.asax.cs:

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);
        }
    }

App_start\NinjectWebCommon:

public static class NinjectWebCommon 
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
            DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            bootstrapper.Initialize(CreateKernel);
        }

        /// <summary>
        /// Stops the application.
        /// </summary>
        public static void Stop()
        {
            bootstrapper.ShutDown();
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
        }        
    }

「シーケンスに要素が含まれていません」というエラーが表示されます。私は何を間違っていますか?

エラーの詳細:

Description: An unhandled exception occurred during the execution of the current web request. Examine the stack trace for more information about this error and where it originated in the code.

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error:
  Unhandled exception occurred during 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:

[InvalidOperationException: Последовательность не содержит элементов]
   System.Linq.Enumerable.Single(IEnumerable`1 source) +320
   Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectMvcHttpApplicationPlugin.cs:53
   Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1 series, Action`1 action) in c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:32
   Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:80
4

3 に答える 3

40

これを明確にするために、NuGet を使用して 'Ninject.Mvc3' パッケージ (私はバージョン 3.0.0.6 を使用しました) を追加する場合、に変更を加える必要はありませんglobal.asax.cs。NuGet パッケージは、MVC 4 プロジェクトNinjectWebCommonのフォルダーにクラスを作成することで魔法のように機能します。App_Start

これは、元のポスターと同様のチュートリアルに従っているように見えるためです (「Ninject を使用した asp.net mvc4 および webapi での依存性注入」と呼ばれるコード プロジェクトの記事に従いました)、元のポスターとまったく同じ問題がありました。ポスター。Code Project の記事では、 NuGet を使用する必要がある (そして、Ninject 参照に触れたり、手動で追加したりしないでください (および を修正してください)) ことを明確にしていません。global.asax.cs global.asax.cs

于 2012-08-28T20:56:11.553 に答える
24

あなたはから派生していて、同時にNinjectHttpApplication使用しています。App_Startいずれかを選択してください!詳細については、Ninject.MVC3のドキュメントをお読みください。

于 2012-04-25T13:37:57.333 に答える
7

も使用するプロジェクトを参照していないことを確認してくださいNinjectMVC3 App_Start。そのようなものへの参照を削除した後、私のプロジェクトは機能し始めました。また、前に述べたように、名前空間がすべて一致し、正しいことを確認してください。

于 2012-09-05T11:44:05.700 に答える