Asp.net-Mvc
MVC WebApi 不使用 AutofacWebApiDependencyResolver
我有一個混合的 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,您需要做兩件事:
- 註冊 Autofac 依賴解析器(在 App_Start 中):
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
- 並通過以下呼叫在容器建構器中註冊您的 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