为了账号安全,请及时绑定邮箱和手机立即绑定

无法在Web Api项目中配置autofac

无法在Web Api项目中配置autofac

C#
弑天下 2023-06-25 13:52:08
我面临着一个奇怪的问题,在过去的两天里一直让我感到困惑。由于我研究并尝试了不同的解决方案,但尚未解决。Autofac 用作 DI 容器。该解决方案包含多个项目,包括 ASP.NET MVC 5 和 Web API。我们无法在 API 项目中配置和注册 Autofac,而它在 Web 项目上正常工作。我尝试了几种解决方案,但没有一个有效。我面临着&ldquo; 尝试创建'OperationController'类型的控制器时发生错误。确保控制器具有无参数公共构造函数&rdquo;的错误。下面提供了代码启动.cspublic void Configuration(IAppBuilder app)        {            var httpConfig = new HttpConfiguration();            ConfigureOAuth(app);            WebApiConfig.Register(httpConfig);            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);            RegisterMappers();            var builder = new ContainerBuilder();            //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();            builder.RegisterApiControllers(typeof(OperationController).Assembly).PropertiesAutowired();            builder.RegisterAssemblyTypes(Assembly.Load("PSMS.Repository"))                .Where(t => t.Name.EndsWith("Repository"))                .AsImplementedInterfaces()                .InstancePerLifetimeScope();            builder.RegisterType<PsmsDbContext>().InstancePerRequest();            builder.RegisterType<TransactionDbContext>().InstancePerRequest();            builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency();            var container = builder.Build();            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);            app.UseWebApi(httpConfig);        }我再次重复一遍,相同的配置适用于 ASP.NET MVC 项目。
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您使用的是 OWIN,而不是经典的 Web API 设置。根据文档:

OWIN 集成中的一个常见错误是使用GlobalConfiguration.Configuration在 OWIN 中,您从头开始创建配置。GlobalConfiguration.Configuration使用 OWIN 集成时,您不应在任何地方引用。

切换这个:

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);

另外,不确定为什么要设置 MVC 依赖解析器。对于 Web API,您不需要:

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));


查看完整回答
反对 回复 2023-06-25
  • 1 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信