2014-10-29 134 views
5

這個問題並不新鮮,但我的問題似乎與我迄今爲止看到的不同。Ninject.MVC3。 Bootstrapper.Initialize throws「序列不包含任何元素」

我有一個包含幾個項目的解決方案:其中兩個是C#MVC4。我在兩者上都安裝了Ninject.MVC3 Nuget包,並且我正在使用App_Start文件夾方法(https://github.com/ninject/Ninject.Web.Mvc/wiki/Setting-up-an-MVC3-application)中的NinjectWebCommon類。

版本:

  1. Ninject 3.2.2.0
  2. Ninject.MVC3 3.2.1.0
  3. Ninject.Web.Common 3.2.3.0
  4. Ninject.Web.Common.WebHost 3.2.3.0
  5. WebActivator 2.0.5的第一個項目的

NinjectWebCommon.cs:

using System.Web.Mvc; 
using Ninject.Web.Mvc.FilterBindingSyntax; 
using S1.MVC.Filters.CentralAutenticacao.Business; 
using S1.MVC.Filters.Error; 

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(S1.CRM.Eventos.App_Start.NinjectWebCommon), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(S1.CRM.Eventos.App_Start.NinjectWebCommon), "Stop")] 

namespace S1.CRM.Eventos.App_Start 
{ 
    using System; 
    using System.Web; 

    using Microsoft.Web.Infrastructure.DynamicModuleHelper; 

    using Ninject; 
    using Ninject.Web.Common; 

    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(); 
      try 
      { 
       kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
       kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 

       RegisterServices(kernel); 
       return kernel; 
      } 
      catch 
      { 
       kernel.Dispose(); 
       throw; 
      } 
     } 

     /// <summary> 
     /// Load your modules or register your services here! 
     /// </summary> 
     /// <param name="kernel">The kernel.</param> 
     private static void RegisterServices(IKernel kernel) 
     { 
      kernel.BindFilter<FiltroCentralAutenticacao>(FilterScope.Global, 0); 
      kernel.BindFilter<GenericErro>(FilterScope.Global, 0); 
     }   
    } 
} 

第二個項目的NinjectWebCommon.cs:

using System.Web.Mvc; 
using Ninject.Web.Mvc.FilterBindingSyntax; 
using S1.MVC.Filters.CentralAutenticacao.Business; 
using S1.MVC.Filters.Error; 

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(S1.CRM.Crud.App_Start.NinjectWebCommon), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(S1.CRM.Crud.App_Start.NinjectWebCommon), "Stop")] 

namespace S1.CRM.Crud.App_Start 
{ 
    using System; 
    using System.Web; 

    using Microsoft.Web.Infrastructure.DynamicModuleHelper; 

    using Ninject; 
    using Ninject.Web.Common; 

    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(); 
      try 
      { 
       kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
       kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 

       RegisterServices(kernel); 
       return kernel; 
      } 
      catch 
      { 
       kernel.Dispose(); 
       throw; 
      } 
     } 

     /// <summary> 
     /// Load your modules or register your services here! 
     /// </summary> 
     /// <param name="kernel">The kernel.</param> 
     private static void RegisterServices(IKernel kernel) 
     { 
      kernel.BindFilter<FiltroCentralAutenticacao>(FilterScope.Global, 0); 
      kernel.BindFilter<GenericErro>(FilterScope.Global, 0); 
     }   
    } 
} 

這是第一個項目的Global.asax文件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Reflection; 
using System.Web; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace S1.CRM.Eventos 
{ 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 
     } 
    } 
} 

第二個和:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace S1.CRM.Crud 
{ 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 
     } 
    } 
} 

當我嘗試運行任何兩個專業版jects,我得到一個InvalidOperationException說「序列不包含任何元素」,呼籲

bootstrapper.Initialize(CreateKernel); 

堆棧跟蹤時:

in System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
in Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start() 
in Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c) 
in Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable`1 series, Action`1 action) 
in Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) 
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)的同一解決方案中的兩個項目時出現此錯誤。所以我試圖卸載其中一個項目,但仍然不斷收到錯誤。

關於正在發生的事情的任何想法?

+0

你也可以發佈它的確切方法內Ninject引發此異常(您可能還以檢查innerexceptions以及)? – nemesv 2014-10-29 14:49:38

+0

我加了異常的棧跟蹤。沒有內在的例外。謝謝 – peflorencio 2014-10-29 16:07:58

回答

8

事實上,在解決方案中還有另一個項目使用WebActivator:一個MVC項目引用的類庫。我沒有懷疑它,因爲在那裏有WebActivator沒有任何意義。

0

由於我的引用,我體驗了「序列不包含任何元素」。請檢查您的參考。如果有另一個包含Ninject基礎結構目錄的項目的引用也會導致錯誤。如果刪除它可能會解決問題。

1

也會出現此錯誤,如果有是已存在2個代碼文件引用 + NinjectWebCommon。cs(通常位於App_Start文件夾中)。

如果有多個初始化()方法存在,這也導致錯誤 類似「序列不包含任何元素

相關問題