用于Unity 3.0的Microsoft Unity Bootstrapper在此行上引发错误:
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
出现以下错误:
mscorlib.dll中出现"System.ArrayTypeMismatchException"类型的异常,但未在用户代码中处理
附加信息:尝试将元素作为与阵列不兼容的类型进行访问.
整个代码都在这里,这是由nuget下载的bootstrapper预先制作和编写的.
Bootstrapper生成的文件App_Start/UnityMVCActivator.cs
using System.Linq; using System.Web.Mvc; using Microsoft.Practices.Unity.Mvc; [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(WebApplication.WebUI.App_Start.UnityWebActivator), "Start")] namespace WebApplication.WebUI.App_Start { ///Provides the bootstrapping for integrating Unity with ASP.NET MVC. public static class UnityWebActivator { ///Integrates Unity when the application starts. public static void Start() { var container = UnityConfig.GetConfiguredContainer(); FilterProviders.Providers.Remove(FilterProviders.Providers.OfType().First()); FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); // TODO: Uncomment if you want to use PerRequestLifetimeManager // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); } } }
Bootstrapper生成的文件App_Start/UnityConfig.cs
using System; using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.Configuration; using WebApplication.Domain.Abstract; using WebApplication.Domain.Concrete; namespace WebApplication.WebUI.App_Start { ////// Specifies the Unity configuration for the main container. /// public class UnityConfig { #region Unity Container private static Lazycontainer = new Lazy (() => { var container = new UnityContainer(); RegisterTypes(container); return container; }); /// /// Gets the configured Unity container. /// public static IUnityContainer GetConfiguredContainer() { return container.Value; } #endregion ///Registers the type mappings with the Unity container. /// The unity container to configure. ///There is no need to register concrete types such as controllers or API controllers (unless you want to /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered. public static void RegisterTypes(IUnityContainer container) { // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements. //container.LoadConfiguration(); // TODO: Register your types here //container.RegisterType(); } } }
有任何想法吗?
#region Assembly Microsoft.Practices.Unity.Mvc.dll, v3.0.0.0 // C:\Users\James\Documents\Visual Studio 2013\Projects\Application\packages\Unity.Mvc.3.0.1304.0\lib\Net45\Microsoft.Practices.Unity.Mvc.dll #endregion using Microsoft.Practices.Unity; using System.Collections.Generic; using System.Web.Mvc; namespace Microsoft.Practices.Unity.Mvc { // Summary: // Defines a filter provider for filter attributes that support injection of // Unity dependencies. public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider { // Summary: // Initializes a new instance of the Microsoft.Practices.Unity.Mvc.UnityFilterAttributeFilterProvider // class. // // Parameters: // container: // The Microsoft.Practices.Unity.IUnityContainer that will be used to inject // the filters. public UnityFilterAttributeFilterProvider(IUnityContainer container); // Summary: // Gets a collection of custom action attributes, and injects them using a Unity // container. // // Parameters: // controllerContext: // The controller context. // // actionDescriptor: // The action descriptor. // // Returns: // A collection of custom action attributes. protected override IEnumerableGetActionAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor); // // Summary: // Gets a collection of controller attributes, and injects them using a Unity // container. // // Parameters: // controllerContext: // The controller context. // // actionDescriptor: // The action descriptor. // // Returns: // A collection of controller attributes. protected override IEnumerable GetControllerAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor); } }
Unity bootstrapper安装的软件包
堆:
[ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.] System.Collections.Generic.List`1.Insert(Int32 index, T item) +58 System.Collections.ObjectModel.Collection`1.InsertItem(Int32 index, T item) +55 System.Web.Mvc.FilterProviderCollection.InsertItem(Int32 index, IFilterProvider item) +47 System.Collections.ObjectModel.Collection`1.Add(T item) +98 WebApplication.WebUI.App_Start.UnityWebActivator.Start() in c:\Users\James\Documents\Visual Studio 2013\Projects\Application\WebApplication.WebUI\App_Start\UnityMvcActivator.cs:18 [TargetInvocationException: Exception has been thrown by the target of an invocation.] System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +192 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +155 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +19 WebActivatorEx.BaseActivationMethodAttribute.InvokeMethod() +236 WebActivatorEx.ActivationManager.RunActivationMethods(Boolean designerMode) +535 WebActivatorEx.ActivationManager.RunPreStartMethods(Boolean designerMode) +48 WebActivatorEx.ActivationManager.Run() +163 [InvalidOperationException: The pre-application start initialization method Run on type WebActivatorEx.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..] System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +556 System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +132 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +102 System.Web.Compilation.BuildManager.ExecutePreAppStart() +153 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +516 [HttpException (0x80004005): The pre-application start initialization method Run on type WebActivatorEx.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9882460 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254
Spock.. 14
更新解决方案
好的,这非常棘手.我不知道你是如何设法得到这种类型的项目的.您可能已从早期版本的ASP.NET MVC升级了项目类型.以下任何方式都是答案.
在Web.Config的运行时程序集绑定部分中,请添加以下内容.
这应该可以解决您的问题.