Обновление Nuget для Unity, выдающего 500 с сообщением «Убедитесь, что контроллер имеет открытый конструктор без параметров». - PullRequest
0 голосов
/ 04 октября 2019

ТАК У меня был отлично работающий сервис WebApi с Unity. Я решил взять обновление пакета Nuget, которое перезаписало UnityConfig.cs. Однако я добавил свой код обратно, и он прекрасно работает, когда я пытаюсь запустить его из VisualStudio. Проблема в том, когда я развертываю бин и пытаюсь запустить API из IIS. Я получаю 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, но не при развертывании.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...