Asp.net mvc 确保控制器在web api中具有无参数公共构造函数?

Asp.net mvc 确保控制器在web api中具有无参数公共构造函数?,asp.net-mvc,asp.net-web-api,dependency-injection,inversion-of-control,unity-container,Asp.net Mvc,Asp.net Web Api,Dependency Injection,Inversion Of Control,Unity Container,我正在使用untiy解决依赖注入的问题。我已经根据这个链接实现了 但我犯了这个错误: { “消息”:“发生错误。”, “ExceptionMessage”:“尝试创建“WebApicController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。”, “异常类型”:“System.InvalidOperationException”, “StackTrace”:“at System.Web.Http.Dispatcher.DefaultHttpControllerActivat

我正在使用untiy解决依赖注入的问题。我已经根据这个链接实现了

但我犯了这个错误:

{
“消息”:“发生错误。”,
“ExceptionMessage”:“尝试创建“WebApicController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。”,
“异常类型”:“System.InvalidOperationException”,
“StackTrace”:“at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage请求)\r\n位于System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u1.MoveNext()“,
“内部异常”:{
“消息”:“发生错误。”,
“ExceptionMessage”:“类型'Fairmoves.Controller.WebApicController'没有默认构造函数”,
“ExceptionType”:“System.ArgumentException”,
“StackTrace”:“at System.Linq.Expressions.Expression.New(Type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage请求,Type controllerType,Func`1&activator)\r\n位于System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,Type controllerType)
}

}
由于我在一个项目中同时使用了MVC和WebAPI,因此我理解使用它需要解决这两个依赖关系

因此,我删除了WebAPIConfig.cs文件中的以下代码

var container = new UnityContainer();
    container.RegisterType<ILoginBusinessService, LoginBusinessService>(new HierarchicalLifetimeManager());
    container.RegisterType<IUserBusinessService, UserBusinessService>(new HierarchicalLifetimeManager());
    config.DependencyResolver = new UnityResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

就这样,解决了我的问题

我猜您是在将WebAPI合并到MVC中,MVC是紧密耦合的,现在通过添加一个
依赖项注入来实现解耦,因此,除了对我非常有用的小代码进行更改之外,我也在做上面所说的@Edukondalu thaviti

  • 使用
    管理Nuget软件包安装
    Unity.WebAPI
    Unity.WebAPI.5.1

    注意:安装完成后,对话框将打开并要求您覆盖
    Unity.Config.cs
    文件,只需选择
    No

  • 确保存在
    UnityConfig.RegisterComponents()内部
    应用程序\u Start()
    方法位于
    Global.asax.cs
    文件

  • 现在包括

    container.RegisterType();
    container.RegisterType();
    container.RegisterType();
    GlobalConfiguration.Configuration.DependencyResolver=新的Unity.WebApi.UnityDependencyResolver(容器);
    
    Unity.Config.cs
    文件中的方法
    RegisterComponents()
    中。假设您已经为当前类创建了一个实例


  • 现在运行您的项目。上面的代码对我来说非常有效,如果您有任何错误,请纠正我。

    问题似乎是应用程序无法解决构造函数参数的依赖关系,请检查web API的bin文件夹中是否存在实现类的.dll?是,这就是问题所在。请检查一下,如果你遗漏了什么,请用你的代码检查一下。我检查了三次。你注册控制器了吗?您需要确保Unity可以“看到”您的控制器并执行必要的注入。Unity.WebAPI Nuget组件解决了我的问题。。谢谢你的另一种方式…好的@Ramsk