asp.net-mvc – MVC WebApi不使用AutofacWebApiDependencyResolver

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC WebApi不使用AutofacWebApiDependencyResolver前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个混合的MVC 4应用程序,其中一些控制器是Controller的常规实现,一些控制器是ApiController的实现.我也在使用Autofac for DI,但是看起来WebApi控制器“激活器”机制(由于缺乏一个更具体的术语)并没有使用Autofac解析器(AutofacWebApiDependencyResolver),这导致当我创建一个异常时抛出异常请求我的一个api控制器.这是错误
  1. <Error>
  2. <Message>An error has occurred.</Message>
  3. <ExceptionMessage>
  4. Type 'MyApp.Areas.Api.Controllers.MyController' does not have a default constructor
  5. </ExceptionMessage>
  6. <ExceptionType>System.ArgumentException</ExceptionType>
  7. <StackTrace>
  8. at System.Linq.Expressions.Expression.New(Type type)
  9. at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
  10. at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request,Type controllerType,Func`1& activator)
  11. at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType)
  12. </StackTrace>
  13. </Error>

这是我如何设置:

  1. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  2. System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

我对Autofac.WebApi整合的理解是,上述是使WebApi使用Autofac解析器的唯一要求,所以可能会发生什么?

旁注:我可以想到的唯一愚蠢的部分可能是有可能是有我的WebApi控制器在一个MVC区域,它不受DefaultHttpControllerSelector的支持,所以实现了一个自定义的(相对于Andrew Malkov) .我不直觉,这将对解析器有任何影响,但是,因为选择器只返回一个稍后用于激活的类型.

解决方法

要为Web.API设置Autofac,您需要做两件事情:

>注册Autofac依赖关系解析器(在App_Start中):

  1. GlobalConfiguration.Configuration.DependencyResolver =
  2. new AutofacWebApiDependencyResolver(container);

>并在您的容器构建器中注册您的Api控制器,其中包含:

  1. containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());

猜你在找的asp.Net相关文章