Asp.net mvc 4 从测试版升级后的Autofac/MVC4/WebApi(RC)依赖项注入问题

Asp.net mvc 4 从测试版升级后的Autofac/MVC4/WebApi(RC)依赖项注入问题,asp.net-mvc-4,autofac,Asp.net Mvc 4,Autofac,更新到ASP.NET MVC4(RC)后,我收到以下错误: “System.Web.Http.HttpConfiguration”不包含的定义 “ServiceResolver”和没有扩展方法“ServiceResolver”接受 类型为“System.Web.Http.HttpConfiguration”的第一个参数可以是 找到(是否缺少using指令或程序集引用?) 我读了这篇文章后意识到(http://www.asp.net/web-api/overview/extensibility/u

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

“System.Web.Http.HttpConfiguration”不包含的定义 “ServiceResolver”和没有扩展方法“ServiceResolver”接受 类型为“System.Web.Http.HttpConfiguration”的第一个参数可以是 找到(是否缺少using指令或程序集引用?)

我读了这篇文章后意识到(http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver)这些接口已更改,但我不确定如何将此更改应用于如何使用Autofac

我是否需要等待Autofac的新版本,或者是否有其他方法可以解决此问题。

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

基本上,使用新软件包,您只需在global.asax.cs中执行以下操作:

var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);
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;
    }
}
/Edit

我刚刚遇到了同样的问题-我能够通过创建一个简单的IDependencyResolver实现来解决这个问题,该实现封装了现有的AutofacDependencyResolver

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

因此,有了这些注意事项,IDependencyResolver实现如下所示:

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

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


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

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

var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver);

@StevenWilcock我认为这是可行的,除了我有一个新的错误,我不确定是相关的。在builder.ConfigureWebApi(配置)上;我收到以下错误:无法从程序集System.Web.Http(版本=4.0.0.0)加载类型“System.Web.Http.Dispatcher.DefaultHttpControllerFactory”。下面是前面的几行:var configuration=GlobalConfiguration.configuration;var builder=new ContainerBuilder();//使用集成实现配置容器。builder.ConfigureWebApi(配置);也许我也需要将System.Net.Http更新为RC?没有…我需要安装新的System.Web.Http包吗?您可能需要获取nuget包Microsoft.Net.Http.2.0.20505.0,其中包含更新的System.Net.Http程序集-可能还缺少其他程序集,不确定。我没有将我的MVC4项目从Beta升级到RC-我创建了一个新项目,并复制了旧项目中我需要的所有内容-这样就不会遗漏任何内容,尽管这本身是一项艰巨的工作:)我假设您已经从这里安装了MVC4,所以您有项目模板等?我实际上使用的是Autofac.MVC4中的AutofacDependencyResolver,不是Autofac.WebApi。此外,我正在手动注册Api控制器,如builder.RegisterType();与使用ConfigureWebApi方法相比,您可能会更幸运。这当然取决于您的控制器及其依赖关系。我注册了api控制器及其所有依赖项的类型(标准依赖项注入配置)。因此,对于最简单的控制器,我只需要注册控制器本身和RavenDB DocumentStore,这是控制器的唯一依赖项。现在我有Autofac for MVC4与我的web api一起工作,我想知道重新使用Autofac.WebApi是否有好处
Microsoft.AspNet.WebApi.Tracing
Microsoft.AspNet.WebApi.OData