Ben*_*ins 10 asp.net-mvc autofac asp.net-web-api
我有一个混合的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>
Run Code Online (Sandbox Code Playgroud)
这是我如何设置它:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)
我对Autofac.WebApi集成的理解是,上面是让WebApi使用Autofac解析器的唯一要求,那么可能会发生什么?
旁注:我能想到的唯一一个愚蠢的部分可能就是我在MVC区域中有WebApi控制器,这是不受支持的DefaultHttpControllerSelector
,因此实现了一个自定义控制器(相对于Andrew Malkov) .但是,我并不认为这会对解析器有任何影响,因为选择器只返回一个稍后在激活中使用的类型.
nem*_*esv 17
要为Web.API设置Autofac,您需要做两件事:
注册Autofac依赖关系解析器(在App_Start中):
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)并通过以下呼叫在容器构建器中注册您的Api控制器:
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
3595 次 |
最近记录: |