asp.net-web-api - ASP .Net 4 Web Api RC + Autofac 手动解析

标签 asp.net-web-api autofac asp.net-mvc

我正在尝试在 Web Api 方法中使用 depedency 解析器。这工作正常,并且与带有 DepedencyResolver.GetService() 的经典 ASP.NET MVC 一起工作良好

但我无法在 WepApi 方法中使用它。

我的注册将所有实例注册为 InstancePerApiRequest,如果我在我的 WebAPIConroller 的构造函数中添加我在我的 Bootstrap 中注册的所有类型中的任何一个,那么在内部调用它们时可以正常注入(inject)但不再注入(inject)。

像我说的Get方法

var userRepository = (IUserRepositoryu)GlobalConfiguration
       .Configuration.DependencyResolver.GetService(typeof(IUserRepository));

我收到无范围 WebRequest 错误。奇怪的是,在他们将其全部更改为 GlobalConfiguration 之前,它在 Beta 中运行良好。

所以我的问题是,如何像以前一样在我的 webAPI 的生命周期范围内激活我的 Autofac 注册程序集

我的错误:

“从请求实例的范围内看不到带有与‘AutofacWebRequest’匹配的标签的范围。这通常表示注册为每个 HTTP 请求的组件正在被 SingleInstance() 组件(或类似的场景。)在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身请求依赖项。”

 var resolver = new AutofacWebApiDependencyResolver(container);
 configuration.DependencyResolver = resolver;

最佳答案

在 Web API 中,全局依赖解析器用于访问全局实例。每个请求的服务来自 Web API 为处理请求而创建的依赖范围。我不确定 Web API 中是否有任何方法可以访问当前的依赖范围 - 知道它会很有趣。

这里最好的选择是只使用依赖注入(inject)而不是像这样直接调用解析器。您的代码的哪一部分需要进行此调用?

关于asp.net-web-api - ASP .Net 4 Web Api RC + Autofac 手动解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123732/

相关文章:

c# - 使用autofac和dynamicproxy2选择性拦截方法

ajax - 通过 ASP.NET MVC 4 中的查询字符串传递特殊字符

c# - PreRegistrationHandler 没有因任务错误代码而失败

asp.net-mvc - 在多个Web应用程序上使用ASP.Net Identity

c# - Autofac - 构建前解决

c# - Autofac 属性注入(inject)失败

javascript - 为什么不允许在 jquery 数据表服务器端处理 ajax 中使用成功?

C#:如何在 Javascript 中使用全局变量

c# - WebApi + 简单注入(inject)器 + OWIN

asp.net - 无法从非 Windows 计算机远程连接到 IIS Express