var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);
更新到 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 的新版本,还是有其他方法可以克服这个问题。
Edit:正如 James Bradt 在下面的文章中提到的那样,Autofac 软件包现已更新以解决此问题,因此将来遇到此线程的任何人都应该首先尝试新软件包:)
基本上,使用新包,您只需在 global.asax.cs 中执行此操作:
GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);
/Edit
我刚刚遇到了同样的问题 - 我能够通过创建一个包装现有 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)