将 WebApi.HelpPage 添加到 webApi 项目后的 StructureMap 异常

本文关键字:StructureMap 异常 项目 webApi WebApi HelpPage 添加 | 更新日期: 2023-09-27 18:37:25

我按照此处的说明将webApi.HelpPage区域和视图添加到使用structureMap的现有项目中 - 但是在访问/Help url时:

StructureMap Exception Code:  202 No Default Instance defined for PluginFamily System.Web.Http.HttpRouteCollection, System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

所以我在结构图配置上缺少一些东西:

ObjectFactory.Configure(x => x.Scan(scan =>
            {
                scan.TheCallingAssembly();
                scan.AssembliesFromApplicationBaseDirectory();
                scan.AddAllTypesOf<IHttpModule>();
                scan.WithDefaultConventions();
            }));

任何人都可以指出结构图新手的正确方向吗?

将 WebApi.HelpPage 添加到 webApi 项目后的 StructureMap 异常

在结构图 3.x 中,我在注册表中成功使用了以下内容:

For<HelpController>().Use( ctx => new HelpController() );

我也有同样的问题。我发现的问题是帮助控制器中有两个构造函数。一个采用 HttpConfiguration,另一个采用全局配置。 我强制 StructureMap 通过使 Http 构造函数私有来调用 GlobalConfiguration constuctor。

    public HelpController()
        : this(GlobalConfiguration.Configuration)
    {
    }
    private HelpController(HttpConfiguration config)
    {
        Configuration = config;
    }

这似乎起到了作用。

确保从装配扫描仪中跳过 System.Web.* 部件。

ObjectFactory.Configure(x => x.Scan(scan =>
    {
        scan.TheCallingAssembly();
        scan.AssembliesFromApplicationBaseDirectory(assembly => !assembly.FullName.StartsWith("System.Web"));
        scan.AddAllTypesOf<IHttpModule>();
        scan.WithDefaultConventions();
    }));

这是一个错误,我们都在StructureMap的Github上发表了评论。我希望将来不需要我们这样做,但就目前而言,这是一个快速解决方案。