0

我正在为 Web API 2 项目使用 StructureMap.WebApi2 nuget 包来管理依赖注入。Web API 控制器使用构造函数注入来注入 UrlHelper 依赖项,该依赖项应由 StructureMap Ioc 解决。我正在尝试以下方法来设置 Web api 控制器的 UrlHelper:

public class FooController : ApiController
{
    private UrlHelper _UrlHelper;

    public ModelFactory(HttpRequestMessage request)
        {
            _UrlHelper = new UrlHelper(request);
            }
}

但是使用上面的代码,我收到以下错误:

没有注册默认实例,无法自动确定类型“System.Net.Http.HttpMethod”没有为 System.Net.Http.HttpMethod 指定配置

谁能建议我解决上述问题的最佳方法?

4

1 回答 1

0

您的问题是 StructureMap 尝试首先解决最贪婪的构造函数,在这种情况下,查看源代码HttpRequestMessage显示以下构造函数:

public HttpRequestMessage(HttpMethod method, string requestUri);
public HttpRequestMessage(HttpMethod method, Uri requestUri);

这就是您的HttpMethod问题的来源。StructureMap 尝试创建一个实例,HttpRequestMessage但不知道如何解决methodrequestUri依赖关系。

在这种情况下,您需要在 StructureMap 配置中手动配置依赖项,以便它知道如何创建如下实例HttpRequestMessage

this.For<HttpRequestMessage>().Use(new HttpRequestMessage());

或者,要创建重载构造函数的实例,您需要手动解决重载依赖项(我建议为此使用工厂,以保持您的 SM 配置干净整洁。这是一个如何执行此操作的示例) .

于 2015-04-28T13:50:30.550 回答