Asp.net-Mvc

MVC WebApi 不使用 AutofacWebApiDependencyResolver

  • August 24, 2012

我有一個混合的 MVC 4 應用程序,其中一些控制器是正常實現,Controller而一些控制器是ApiController. 我也將 Autofac 用於 DI,但似乎 WebApi 控制器“啟動器”機器(缺少更具體的術語)沒有使用 Autofac 解析器(AutofacWebApiDependencyResolver),這導致我發出請求時拋出異常針對我的一個 api 控制器。這是錯誤:

<Error>
   <Message>An error has occurred.</Message>
   <ExceptionMessage>
       Type 'MyApp.Areas.Api.Controllers.MyController' does not have a default constructor
   </ExceptionMessage>
   <ExceptionType>System.ArgumentException</ExceptionType>
   <StackTrace>
       at System.Linq.Expressions.Expression.New(Type type) 
       at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) 
       at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) 
       at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
   </StackTrace>
</Error>

這是我的設置方式:

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

我對 Autofac.WebApi 集成的理解是,以上是讓 WebApi 使用 Autofac 解析器的唯一要求,那麼可能會發生什麼?

旁注DefaultHttpControllerSelector:我能想到的唯一愚蠢的部分可能是我在 MVC 區域中有WebApi 控制器,它不受. 不過,我不認為這會對解析器產生任何影響,因為選擇器只返回一個稍後在啟動中使用的類型。

要為 Web.API 設置 Autofac,您需要做兩件事:

  1. 註冊 Autofac 依賴解析器(在 App_Start 中):
GlobalConfiguration.Configuration.DependencyResolver = 
   new AutofacWebApiDependencyResolver(container);
  1. 並通過以下呼叫在容器建構器中註冊您的 Api 控制器:
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());

也許這個部落格可以幫助你:http: //blogs.msdn.com/b/roncain/archive/2012/07/16/dependency-injection-with-asp-net-web-api-and-autofac.aspx

引用自:https://stackoverflow.com/questions/12098346