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的新版本,或者是否有另外一种方法可以解决这个问题.
编辑: 正如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)
| 归档时间: |
|
| 查看次数: |
10360 次 |
| 最近记录: |