gpt4 book ai didi

asp.net-mvc - 确保 Controller 在 web api 中有一个无参数的公共(public)构造函数?

转载 作者:行者123 更新时间:2023-12-05 08:42:27 26 4
gpt4 key购买 nike

我正在努力解决使用 untiy 的依赖注入(inject)问题。我已经按照这个链接https://www.asp.net/web-api/overview/advanced/dependency-injection实现了

但是出现了这个错误:

{
"Message": "An error has occurred.",
"ExceptionMessage": "An error occurred when trying to create a controller of type 'WebAPIController'. Make sure that the controller has a parameterless public constructor.",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException": {
"Message": "An error has occurred.",
"ExceptionMessage": "Type 'Fairmoves.Controllers.WebAPIController' does not have a default constructor",
"ExceptionType": "System.ArgumentException",
"StackTrace": " at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)"
}
}

我的网络 API Controller :

[RoutePrefix("api/WebAPI")]
public class WebAPIController : ApiController
{
private readonly IUserBusinessService UserBusinessService;
private readonly ILoginBusinessService LoginBusinessService;

//public WebAPIController():base()
//{
//}

public WebAPIController(IUserBusinessService UserBusinessService, ILoginBusinessService LoginBusinessService)
{
this.UserBusinessService = UserBusinessService;
this.LoginBusinessService = LoginBusinessService;
}
[HttpPost]
public IHttpActionResult Login([FromBody]AuthModels.LoginModel model)
{
// string strUserId = credentials.LoginName;
//string strPassword = credentials.Password;
var serviceResultDAO1 = LoginBusinessService.LoginUserSubmit(model.LoginName);
}
}

UnityResolver.cs:

public class UnityResolver:IDependencyResolver
{
protected IUnityContainer container;

public UnityResolver(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
this.container = container;
}

[DebuggerStepThrough]
public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}

[DebuggerStepThrough]
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}

public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new UnityResolver(child);
}

public void Dispose()
{
container.Dispose();
}

}

WebApiConfig.cs:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//config.DependencyResolver = new NinjectResolver();

var container = new UnityContainer();
container.RegisterType<ILoginBusinessService, LoginBusinessService>(new HierarchicalLifetimeManager());
container.RegisterType<IUserBusinessService, UserBusinessService>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
//DependencyResolver.SetResolver(new UnityDependencyResolver(container));

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

无法确定问题出在哪里?请进入代码并让我知道。我已关注以下所有这些链接

Make sure that the controller has a parameterless public constructor?

Autofac - Make sure that the controller has a parameterless public constructor

Make sure that the controller has a parameterless public constructor using Ninject

Make sure that the controller has a parameterless public constructor error

但是这些都没有解决我的问题。

最佳答案

因为我在一个项目中同时使用 MVC 和 WebAPI,所以我通过使用这个 link 来理解我需要解决这两个依赖关系。

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

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

在我的项目中安装了一个名为 Unity.WebAPI 的包之后。

在 UnityConfig.cs 文件中添加以下代码

GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

就是这样,解决了我的问题!

关于asp.net-mvc - 确保 Controller 在 web api 中有一个无参数的公共(public)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com