我有一个混合的 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 解析器的唯一要求,那么可能会发生什么?
旁注:我能想到的唯一愚蠢的部分可能是我在 MVC 区域中有 WebApi 控制器,该控制器不支持DefaultHttpControllerSelector
,因此实现了一个自定义控制器(相对于Andrew Malkov) . 不过,我不认为这会对解析器产生任何影响,因为选择器只返回一个稍后在激活中使用的类型。