从beta升级后的Autofac/MVC4/WebApi(RC)依赖注入问题

Geo*_* D. 14 autofac asp.net-mvc-4

var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);
Run Code Online (Sandbox Code Playgroud)

更新到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的新版本,或者是否有另外一种方法可以解决这个问题.

Ste*_*ock 5

编辑: 正如James Bradt在下面的帖子中提到的,Autofac软件包现在已经更新以解决这个问题,所以未来遇到这个帖子的人应该先尝试新的软件包:)

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

GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

/编辑

我刚刚遇到了同样的问题 - 通过创建一个包装现有AutofacDependencyResolver的简单IDependencyResolver实现,我能够在我的情况下解决它.

正如类名所示,我将此视为临时解决方案 - 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Global.asax.cs中设置如下:

var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver);
Run Code Online (Sandbox Code Playgroud)