14
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);

更新到 ASP.NET MVC4 (RC) 后,我收到以下错误:

“System.Web.Http.HttpConfiguration”不包含“ServiceResolver”的定义,并且找不到接受“System.Web.Http.HttpConfiguration”类型的第一个参数的扩展方法“ServiceResolver”(您是否缺少 using 指令还是汇编参考?)

看完这篇(http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver)我意识到这些接口已经改变了,但我不知道如何应用这改变了我使用 Autofac 的方式。

我需要等待 Autofac 的新版本还是有其他方法可以解决这个问题。

4

3 回答 3

5

编辑: 正如 James Bradt 在下面的帖子中提到的那样,Autofac 软件包现已更新以解决此问题,因此将来遇到此线程的任何人都应该先尝试新软件包 :)

基本上,使用新包,您只需要在 global.asax.cs 中执行此操作:

GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);

/编辑

我刚刚遇到了同样的问题——我可以通过创建一个简单的 IDependencyResolver 实现来解决这个问题,该实现包含现有的 AutofacDependencyResolver。

正如类名所暗示的,我将此视为临时解决方案 - BeginScope 和 Dispose 方法需要一些工作,并且显然不适合生产环境,但这允许我继续开发,直到出现适当的解决方案。

因此,有了这些警告,IDependencyResolver 实现看起来像这样:

public class TemporaryDependencyResolver : IDependencyResolver
{
    private readonly AutofacDependencyResolver _autofacDependencyResolver;

    public TemporaryDependencyResolver(AutofacDependencyResolver autofacDependencyResolver)
    {
        _autofacDependencyResolver = autofacDependencyResolver;
    }

    public void Dispose()
    {
    }

    public object GetService(Type serviceType)
    {
        return _autofacDependencyResolver.GetService(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _autofacDependencyResolver.GetServices(serviceType);
    }

    public IDependencyScope BeginScope()
    {
        return this;
    }
}

我在 Global.asax.cs 中这样设置:

var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver);
于 2012-06-03T12:12:18.320 回答
4

AutoFac.WebApi 包已更新至 (RC) - 版本 2.6.2.859

这似乎已针对 RC 和 Beta 之间的依赖关系的变化进行了调整

于 2012-06-07T14:42:11.927 回答
0

我尝试了上述解决方案,但对我没有用。删除并重新安装这两个特定的软件包为我解决了这个问题。

Microsoft.AspNet.WebApi.Tracing
Microsoft.AspNet.WebApi.OData
于 2016-04-07T10:40:40.263 回答