我正在尝试在 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/