来自NuGet的Unity Bootstrapper在App_Start上抛出错误

 w3812127 发布于 2023-02-12 12:39

用于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 Lazy container = 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 IEnumerable GetActionAttributes(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的运行时程序集绑定部分中,请添加以下内容.


    
    

这应该可以解决您的问题.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有