【问题标题】:StructureMap Exception after adding the WebApi.HelpPage to a webApi project将 WebApi.HelpPage 添加到 webApi 项目后的 StructureMap 异常
【发布时间】:2013-10-30 15:59:21
【问题描述】:

我按照此处的说明将 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();
            }));

谁能指出一个结构图新手正确的方向?

【问题讨论】:

标签: c# asp.net-mvc-4 asp.net-web-api structuremap asp.net-web-api-helppages


【解决方案1】:

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

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

【讨论】:

  • 感谢您 - 我们现在已转而使用 swagger.io 进行 api 文档和测试 - 但希望这对其他人有所帮助
  • 谢谢,作为 StructureMap 的初学者,您的帖子对我帮助很大
【解决方案2】:

我也遇到了同样的问题。我发现问题在于 HelpController 中有两个构造函数。一个采用 HttpConfiguration,另一个采用 GlobalConfiguration。我强制 StructureMap 通过将 Http 构造函数设为私有来调用 GlobalConfiguration 构造函数。

    public HelpController()
        : this(GlobalConfiguration.Configuration)
    {
    }

    private HelpController(HttpConfiguration config)
    {
        Configuration = config;
    }

这似乎成功了。

【讨论】:

    【解决方案3】:

    确保从您的程序集扫描器中跳过 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 上发表了评论。我希望我们将来不需要这个,但现在,它是一个快速修复。

    【讨论】:

    • 这就像一个魅力。我唯一的建议是在单独的调用中分离排除的程序集(如果您有许多程序集被排除),即 - scan.ExcludeNamespace("System.Web");
    • 这对我根本不起作用。我需要使用 seek27 的建议。
    • 请注意,这是针对具有基本程序集名称的 MVC 4 Web 应用程序。如果你使用不同的东西(MVC 5 或 MVC 6),你的 Millage 可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多