asp.net-mvc-4 - 从 beta 升级后 Autofac/MVC4/WebApi (RC) 依赖注入(inject)问题

标签 asp.net-mvc-4 autofac

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

更新到 ASP.NET MVC4 (RC) 后出现以下错误:

'System.Web.Http.HttpConfiguration' does not contain a definition for 'ServiceResolver' and no extension method 'ServiceResolver' accepting a first argument of type 'System.Web.Http.HttpConfiguration' could be found (are you missing a using directive or an assembly reference?)

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

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

最佳答案

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

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

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

/编辑

我刚刚遇到了同样的问题 - 我能够通过创建一个包装现有 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;
    }
}

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

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

关于asp.net-mvc-4 - 从 beta 升级后 Autofac/MVC4/WebApi (RC) 依赖注入(inject)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866655/

相关文章:

asp.net-mvc-4 - Html.RenderAction 使用 Post 而不是 Get

javascript - 将文件传递到 Controller 而不使用表单,

javascript - 如何在asp.net MVC中获取外部JavaScript文件中的 session 值、临时数据?

c# - Autofac - ASP.NET Core Action 过滤器中的属性注入(inject)

class - IOC 使用 AutoFac 进行内部类

.net - 处理 Owin/Katana 和 Autofac 中的 DI 错误

performance - 异步和等待 : are they bad?

c# - 用户登录后 mvc WebSecurity.CurrentUserName 为空且 CurrentUserID -1

c# - Autofac Web Api 过滤器 - 在运行时声明

c# - Autofac - DelegatingHandler (HttpMessageHandler) 注册