ASP .Net 4 Web Api RC + Autofac手动解析

Roc*_*han 3 asp.net-mvc autofac asp.net-web-api

我正在尝试在Web Api方法中使用依赖性解析器.这很好用,可以使用DepedencyResolver.GetService()与经典的ASP.NET MVC一起使用

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

我的注册将所有实例注册为InstancePerApiRequest,并且如果我在我的WebAPiConroller的构造函数中添加我在引导程序中注册的所有类型中的任何类型,那么在内部调用它们时注入罚款但不再存在.

在我说的Get Method中就像这样

var userRepository = (IUserRepositoryu)GlobalConfiguration
       .Configuration.DependencyResolver.GetService(typeof(IUserRepository));
Run Code Online (Sandbox Code Playgroud)

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

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

我的错误:

"从请求实例的作用域中看不到具有匹配'AutofacWebRequest'的标记的作用域.这通常表示由SingleInstance()组件(或类似方案)重新请求按HTTP请求注册的组件.在Web集成下,总是从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖,而不是从容器本身请求."

 var resolver = new AutofacWebApiDependencyResolver(container);
 configuration.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud)

Nic*_*rdt 5

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

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

  • 好的.我想你想要的是向你的控制器添加一个`IComponentContext`依赖项,如下所示:`FooController(ICommandBus commandBus,IComponentContext context)`然后从上下文中解析处理程序.任何Autofac组件都可以依赖于"IComponentContext"并访问自己的范围来解决依赖关系.如果您需要更多细节,请告诉我 - 祝您好运! (2认同)