c# – Ninject.MVC3. Bootstrapper.Initialize throws“Sequence contains no elements”

前端之家收集整理的这篇文章主要介绍了c# – Ninject.MVC3. Bootstrapper.Initialize throws“Sequence contains no elements”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题并不新鲜,但我的问题似乎与我迄今为止看到的问题有所不同.

我有一个包含几个项目的解决方案:其中两个是C#MVC4.我在两者上安装了Ninject.MVC3 Nuget包,我在App_Start文件方法(https://github.com/ninject/Ninject.Web.Mvc/wiki/Setting-up-an-MVC3-application)中使用了NinjectWebCommon类.

版本:

> Ninject 3.2.2.0
> Ninject.MVC3 3.2.1.0
> Ninject.Web.Common 3.2.3.0
> Ninject.Web.Common.WebHost 3.2.3.0
> WebActivator 2.0.5

NinjectWebCommon.cs的第一个项目:

  1. using System.Web.Mvc;
  2. using Ninject.Web.Mvc.FilterBindingSyntax;
  3. using S1.MVC.Filters.CentralAutenticacao.Business;
  4. using S1.MVC.Filters.Error;
  5.  
  6. [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(S1.CRM.Eventos.App_Start.NinjectWebCommon),"Start")]
  7. [assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(S1.CRM.Eventos.App_Start.NinjectWebCommon),"Stop")]
  8.  
  9. namespace S1.CRM.Eventos.App_Start
  10. {
  11. using System;
  12. using System.Web;
  13.  
  14. using Microsoft.Web.Infrastructure.DynamicModuleHelper;
  15.  
  16. using Ninject;
  17. using Ninject.Web.Common;
  18.  
  19. public static class NinjectWebCommon
  20. {
  21. private static readonly Bootstrapper bootstrapper = new Bootstrapper();
  22.  
  23. /// <summary>
  24. /// Starts the application
  25. /// </summary>
  26. public static void Start()
  27. {
  28. DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
  29. DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
  30. bootstrapper.Initialize(CreateKernel);
  31. }
  32.  
  33. /// <summary>
  34. /// Stops the application.
  35. /// </summary>
  36. public static void Stop()
  37. {
  38. bootstrapper.ShutDown();
  39. }
  40.  
  41. /// <summary>
  42. /// Creates the kernel that will manage your application.
  43. /// </summary>
  44. /// <returns>The created kernel.</returns>
  45. private static IKernel CreateKernel()
  46. {
  47. var kernel = new StandardKernel();
  48. try
  49. {
  50. kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
  51. kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
  52.  
  53. RegisterServices(kernel);
  54. return kernel;
  55. }
  56. catch
  57. {
  58. kernel.Dispose();
  59. throw;
  60. }
  61. }
  62.  
  63. /// <summary>
  64. /// Load your modules or register your services here!
  65. /// </summary>
  66. /// <param name="kernel">The kernel.</param>
  67. private static void RegisterServices(IKernel kernel)
  68. {
  69. kernel.BindFilter<FiltroCentralAutenticacao>(FilterScope.Global,0);
  70. kernel.BindFilter<GenericErro>(FilterScope.Global,0);
  71. }
  72. }
  73. }

第二个项目的NinjectWebCommon.cs:

  1. using System.Web.Mvc;
  2. using Ninject.Web.Mvc.FilterBindingSyntax;
  3. using S1.MVC.Filters.CentralAutenticacao.Business;
  4. using S1.MVC.Filters.Error;
  5.  
  6. [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(S1.CRM.Crud.App_Start.NinjectWebCommon),"Start")]
  7. [assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(S1.CRM.Crud.App_Start.NinjectWebCommon),"Stop")]
  8.  
  9. namespace S1.CRM.Crud.App_Start
  10. {
  11. using System;
  12. using System.Web;
  13.  
  14. using Microsoft.Web.Infrastructure.DynamicModuleHelper;
  15.  
  16. using Ninject;
  17. using Ninject.Web.Common;
  18.  
  19. public static class NinjectWebCommon
  20. {
  21. private static readonly Bootstrapper bootstrapper = new Bootstrapper();
  22.  
  23. /// <summary>
  24. /// Starts the application
  25. /// </summary>
  26. public static void Start()
  27. {
  28. DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
  29. DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
  30. bootstrapper.Initialize(CreateKernel);
  31. }
  32.  
  33. /// <summary>
  34. /// Stops the application.
  35. /// </summary>
  36. public static void Stop()
  37. {
  38. bootstrapper.ShutDown();
  39. }
  40.  
  41. /// <summary>
  42. /// Creates the kernel that will manage your application.
  43. /// </summary>
  44. /// <returns>The created kernel.</returns>
  45. private static IKernel CreateKernel()
  46. {
  47. var kernel = new StandardKernel();
  48. try
  49. {
  50. kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
  51. kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
  52.  
  53. RegisterServices(kernel);
  54. return kernel;
  55. }
  56. catch
  57. {
  58. kernel.Dispose();
  59. throw;
  60. }
  61. }
  62.  
  63. /// <summary>
  64. /// Load your modules or register your services here!
  65. /// </summary>
  66. /// <param name="kernel">The kernel.</param>
  67. private static void RegisterServices(IKernel kernel)
  68. {
  69. kernel.BindFilter<FiltroCentralAutenticacao>(FilterScope.Global,0);
  70. }
  71. }
  72. }

这是第一个项目的global.asax文件

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Web;
  6. using System.Web.Http;
  7. using System.Web.Mvc;
  8. using System.Web.Optimization;
  9. using System.Web.Routing;
  10.  
  11. namespace S1.CRM.Eventos
  12. {
  13. // Note: For instructions on enabling IIS6 or IIS7 classic mode,// visit http://go.microsoft.com/?LinkId=9394801
  14.  
  15. public class MvcApplication : HttpApplication
  16. {
  17. protected void Application_Start()
  18. {
  19. AreaRegistration.RegisterAllAreas();
  20.  
  21. WebApiConfig.Register(GlobalConfiguration.Configuration);
  22. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  23. RouteConfig.RegisterRoutes(RouteTable.Routes);
  24. BundleConfig.RegisterBundles(BundleTable.Bundles);
  25. AuthConfig.RegisterAuth();
  26. }
  27. }
  28. }

而第二个:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Http;
  6. using System.Web.Mvc;
  7. using System.Web.Optimization;
  8. using System.Web.Routing;
  9.  
  10. namespace S1.CRM.Crud
  11. {
  12. // Note: For instructions on enabling IIS6 or IIS7 classic mode,// visit http://go.microsoft.com/?LinkId=9394801
  13.  
  14. public class MvcApplication : HttpApplication
  15. {
  16. protected void Application_Start()
  17. {
  18. AreaRegistration.RegisterAllAreas();
  19.  
  20. WebApiConfig.Register(GlobalConfiguration.Configuration);
  21. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  22. RouteConfig.RegisterRoutes(RouteTable.Routes);
  23. BundleConfig.RegisterBundles(BundleTable.Bundles);
  24. AuthConfig.RegisterAuth();
  25. }
  26. }
  27. }

当我尝试运行这两个项目中的任何一个时,我在调用时得到一个InvalidOperationException,说“Sequence contains no elements”

  1. bootstrapper.Initialize(CreateKernel);

堆栈跟踪:

  1. in System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
  2. in Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start()
  3. in Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c)
  4. in Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable`1 series,Action`1 action)
  5. in Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback)
  6. in S1.CRM.Eventos.App_Start.NinjectWebCommon.Start() in d:\git-paulo\S1.CRM\S1.CRM.Eventos\App_Start\NinjectWebCommon.cs:line 30

有些人在使用Global.asax派生自NinjectHttpApplication并使用NinjectWebCommon类或重命名程序集时(Ninject + MVC3 = InvalidOperationException: Sequence contains no elements)有这个问题.那不是我的情况.

其他人在使用WebActivator初始化Ninject(Ninject for Web Site and Api – Sequence contains no elements)的同一解决方案中的两个项目时遇到此错误.所以我试图卸载其中一个项目,但仍然不断收到错误.

关于发生了什么的任何想法?

解决方法

实际上,在解决方案中还有另一个使用WebActivator的项目:一个MVC项目引用的类库.我没有怀疑它,因为在那里拥有WebActivator没有任何意义.

猜你在找的C#相关文章