gpt4 book ai didi

asp.net-mvc - MVC Web Api 不使用 Autofac Web Api DependencyResolver

转载 作者:行者123 更新时间:2023-12-02 00:08:30 26 4
gpt4 key购买 nike

我有一个混合 MVC 4 应用程序,其中一些 Controller 是 Controller 的常规实现一些 Controller 是 ApiController 的实现。我也在使用 Autofac 进行 DI,但似乎 WebApi Controller “激活器”机制(由于缺乏更具体的术语)没有使用 Autofac 解析器 ( AutofacWebApiDependencyResolver ),这会导致当我使用 Autofac 解析器时抛出异常针对我的一个 api Controller 发出请求。错误如下:

<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 Controller ,而 DefaultHttpControllerSelector 不支持该 Controller 。 ,因此实现了一个自定义的(相对于 Andrew Malkov )。不过,我并不认为这会对解析器产生任何影响,因为选择器仅返回稍后在激活中使用的类型。

最佳答案

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

  1. 注册 Autofac 依赖解析器(在 App_Start 中):

    GlobalConfiguration.Configuration.DependencyResolver = 
    new AutofacWebApiDependencyResolver(container);
  2. 并通过以下调用在容器构建器中注册您的 Api Controller :

    containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());

关于asp.net-mvc - MVC Web Api 不使用 Autofac Web Api DependencyResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com