C# Nuget关于Unity投掷500的更新;确保控制器具有无参数公共构造函数。”;,
因此,我有一个与Unity完美合作的WebApi服务。我决定使用Nuget软件包更新,它重写了UnityConfig.cs,但是,我添加了我的代码,当我尝试从VisualStudio运行它时,它可以正常工作。问题是当我部署bin并尝试从IIS运行api时。我得了500分,但有以下例外: Exception.Source=System.Web.Http.Dispatcher.DefaultHttpControllerActivator Exception.Message=尝试创建“StateController”类型的控制器时出错。确保控制器具有无参数公共构造函数C# Nuget关于Unity投掷500的更新;确保控制器具有无参数公共构造函数。”;,,c#,visual-studio,dependency-injection,inversion-of-control,unity-container,C#,Visual Studio,Dependency Injection,Inversion Of Control,Unity Container,因此,我有一个与Unity完美合作的WebApi服务。我决定使用Nuget软件包更新,它重写了UnityConfig.cs,但是,我添加了我的代码,当我尝试从VisualStudio运行它时,它可以正常工作。问题是当我部署bin并尝试从IIS运行api时。我得了500分,但有以下例外: Exception.Source=System.Web.Http.Dispatcher.DefaultHttpControllerActivator Exception.Message=尝试创建“StateCon
//
///指定主容器的统一配置。
///
公共静态类UnityConfig
{
#区域统一容器
私有静态惰性容器=
新懒惰(()=>
{
var container=new UnityContainer();
注册类型(容器);
返回容器;
});
///
///配置的Unity容器。
///
公共静态IUnityContainer Container=>Container.Value;
#端区
公共静态无效注册表类型(IUnityContainer容器)
{
字符串dbConnectionString=WebConfiguration Manager.ConnectionString[“abc”].ConnectionString;
StateRepository StateRepository=新的StateRepository(dbConnectionString);
//注册具有单例生存期的默认(未命名)类型映射
容器.RegisterInstance(stateRepository);
}
}
她的是我的UnityWebpiActivator.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();
}
}
}
使用System.Web.Http;
使用Unity.AspNet.WebApi;
[程序集:WebActivatorEx.PreApplicationStartMethod(类型为(PowerManagementServices.UnityWebPiActivator),名称为(PowerManagementServices.UnityWebPiActivator.Start))]
[程序集:WebActivatorEx.ApplicationShutdownMethod(类型为(PowerManagementServices.UnityWebPiActivator),名称为(PowerManagementServices.UnityWebPiActivator.Shutdown))]
命名空间PowerManagementServices
{
///
///当Unity托管在ASP.NET中时,提供将其与WebApi集成的引导。
///
公共静态类UnityWebPiActivator
{
///
///在应用程序启动时集成Unity。
///
公共静态void Start()
{
//如果要使用,请使用UnityHierarchicalDependencyResolver
//每个IHTTP控制器分辨率的新子容器。
//var解析器=新的UnityHierarchicalDependencyResolver(UnityConfig.Container);
var resolver=new unitydependencysolver(UnityConfig.Container);
GlobalConfiguration.Configuration.DependencyResolver=解析程序;
}
///
///在应用程序关闭时处置Unity容器。
///
公共静态无效关机()
{
UnityConfig.Container.Dispose();
}
}
}
少了什么?正如我提到的,在我接受nuget更新之前,这个服务工作得非常好。现在它可以在VS上工作,但在部署时无法工作
提前感谢。您的StateController类的构造函数是什么样子的?私有只读IStateRepository stateRepository;publicstatecontroller(IStateRepository服务){stateRepository=service;}我几乎想相信它没有正确编译。
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();
}
}
}