首页 > 解决方案 > 在 Unity 上更新 Nuget 时会抛出 500,并带有“确保控制器具有无参数的公共构造函数。”,

问题描述

所以我有一个与 Unity 完美运行的 WebApi 服务。我决定采用覆盖 UnityConfig.cs 的 Nuget 包更新,但是,我添加了我的代码,当我尝试从 VisualStudio 运行它时它工作正常。问题是当我部署 bin 并尝试从 IIS 运行 api 时。我得到 500,但有以下例外:

Exception.Source = System.Web.Http.Dispatcher.DefaultHttpControllerActivator Exception.Message = 尝试创建“StateController”类型的控制器时出错。确保控制器有一个无参数的公共构造函数。

/// <summary>
/// Specifies the Unity configuration for the main container.
/// </summary>
public static class UnityConfig
{
    #region Unity Container
    private static Lazy<IUnityContainer> container =
        new Lazy<IUnityContainer>(() =>
        {
            var container = new UnityContainer();
            RegisterTypes(container);
            return container;
        });
    /// <summary>
    /// Configured Unity Container.
    /// </summary>
    public static IUnityContainer Container => container.Value;
    #endregion
    public static void RegisterTypes(IUnityContainer container)
    {
        string dbConnectionString = WebConfigurationManager.ConnectionStrings["abc"].ConnectionString;
        StateRepository stateRepository = new StateRepository(dbConnectionString);
        // Register a default (un-named) type mapping with a singleton lifetime
        container.RegisterInstance<IStateRepository>(stateRepository);
    }
}   

她的是我的 UnityWebApiActivator.cs

using System.Web.Http;
using Unity.AspNet.WebApi;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(PowerManagementServices.UnityWebApiActivator), nameof(PowerManagementServices.UnityWebApiActivator.Start))]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(PowerManagementServices.UnityWebApiActivator), nameof(PowerManagementServices.UnityWebApiActivator.Shutdown))]
namespace PowerManagementServices
{
    /// <summary>
    /// Provides the bootstrapping for integrating Unity with WebApi when it is hosted in ASP.NET.
    /// </summary>
    public static class UnityWebApiActivator
    {
        /// <summary>
        /// Integrates Unity when the application starts.
        /// </summary>
        public static void Start() 
        {
            // Use UnityHierarchicalDependencyResolver if you want to use
            // a new child container for each IHttpController resolution.
            // var resolver = new UnityHierarchicalDependencyResolver(UnityConfig.Container);
            var resolver = new UnityDependencyResolver(UnityConfig.Container);
            GlobalConfiguration.Configuration.DependencyResolver = resolver;
        }
        /// <summary>
        /// Disposes the Unity container when the application is shut down.
        /// </summary>
        public static void Shutdown()
        {
            UnityConfig.Container.Dispose();
        }
    }
}

缺什么 ?正如我提到的,在我进行 nuget 更新之前,该服务运行良好。现在它可以在 VS 中工作,但在部署时不能。

提前致谢。

标签: c#visual-studiodependency-injectioninversion-of-controlunity-container

解决方案


推荐阅读