我正在使用 VS2012 RC 并在 .NET 4.0 模式下创建了一个 MVC4 应用程序。我使用 Ninject + Ninject.MVC3 作为 DI 容器。它可以在我的 Windows 开发计算机和另一台安装了 .NET 4.0 的计算机上运行,但是当我将其部署到带有 Mono 3.0.2、XSP 和 fastcgi + lighttpd 的 Linux 服务器上时,我只是收到一条与 Ninject 相关的错误消息:
System.InvalidOperationException
Sequence contains no matching element
at System.Linq.Enumerable.Single[DataAnnotationsModelValidatorProvider] (IEnumerable`1 source, System.Func`2 predicate, Fallback fallback) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable.Single[DataAnnotationsModelValidatorProvider] (IEnumerable`1 source) [0x00000] in <filename unknown>:0
at Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin.Start () [0x00000] in <filename unknown>:0
at Ninject.Web.Common.Bootstrapper.<Initialize>b__0 (INinjectHttpApplicationPlugin c) [0x00000] in <filename unknown>:0
at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[INinjectHttpApplicationPlugin] (IEnumerable`1 series, System.Action`1 action) [0x00000] in <filename unknown>:0
at Ninject.Web.Common.Bootstrapper.Initialize (System.Func`1 createKernelCallback) [0x00000] in <filename unknown>:0
at MvcApplication1.App_Start.NinjectWebCommon.Start () [0x00000] in <filename unknown>:0
at MvcApplication1.MvcApplication.Application_Start () [0x00000] in <filename unknown>:0
澄清一下:我必须手动调用生成的 NinjectWebCommon 类的 Start 和 Stop 方法,因为 [assemble: WebActivator.PreApplicationStartMethod...]
属性被忽略(我首先收到错误消息关于缺少默认构造函数,这对于 DI Controller 来说是正常的)
我也尝试子类化 NinjectHttpApplication,但遇到了同样的错误。
这里有什么帮助吗?
最佳答案
根据我的经验,Mono 中的 DI 容器有点不稳定。如果您没有时间深入挖掘并修复可能出现的 Mono bug,我会尝试不同的 DI 容器。
关于MONO 3.0.2 + Ninject + MVC4 : Sequence contains no matching element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862991/