gpt4 book ai didi

angularjs - 如何让 StructureMap 与 AngularJs/MVC5 和 WebApi2 Web 项目一起工作

转载 作者:行者123 更新时间:2023-12-04 05:49:51 25 4
gpt4 key购买 nike

所以我有一个带有普通 Controller 的 AngularJs/MVC 项目,并决定将更多内容转移到 SPA 应用程序并添加 WebApi2 以将数据传回我的 UI,而不是使用 MVC。

在我的 Global.asax 中,我的 MVC 项目有以下内容:

DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));



我的 WebApiController 有一个带有 IRepository 的构造函数来与数据库对话并返回一些实体。当我的 AngularJS Web 应用程序调用 Controller 时,断点永远不会命中,并且我收到服务器 500 错误,返回的信息很少。
Public class MyController : ApiController
{
public MyController (IThingRepository thingrepository)
{
....
}
}

我开始看到如下错误:

"ExceptionType": "System.ArgumentException", "Message": "Type 'MyProject.Web.Controllers.MyController' does not have a default constructor"



我不想添加默认构造函数。为什么我会得到这个,我该如何解决?

最佳答案

发生这种情况是因为依赖项解析不适用于 WebApi Controller 。 StructureMap 未找到构造函数并且无法解析 IThingRepository。

WebApi 和 MVC 的工作方式不同,依赖解析机制略有不同。 Global.asax 代码“DependencyResolver.SetResolver”适用于 MVC,但不适用于 WebAPi。那么我们如何让这个工作呢?

  • 安装 nuget 包 StructureMap.MVC5,它具有完成这项工作的管道。

    安装包 StructureMap.MVC5
  • 创建一个适用于 MVC 和 WebApi 的新 StructureMapDependencyResolver 类
    public class StructureMapDependencyResolver : StructureMapDependencyScope, IDependencyResolver
    {
    public StructureMapDependencyResolver(IContainer container) : base(container)
    {
    }
    public IDependencyScope BeginScope()
    {
    IContainer child = this.Container.GetNestedContainer();
    return new StructureMapDependencyResolver(child);
    }
    }
  • 更新 Global.asax 代码:
    //StructureMap Container
    IContainer container = IoC.Initialize();

    //Register for MVC
    DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));

    //Register for Web API
    GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);

  • 有关正在发生的事情的完整说明,请查看 ASP.NET MVC 4, Web API and StructureMap 上的这篇博文

    关于angularjs - 如何让 StructureMap 与 AngularJs/MVC5 和 WebApi2 Web 项目一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24671443/

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