无法在Web Api项目中配置autofac

我面临着一个奇怪的问题,在过去的两天里一直让我感到困惑。由于我研究并尝试了不同的解决方案,但尚未解决。

Autofac 用作 DI 容器。该解决方案包含多个项目,包括 ASP.NET MVC 5 和 Web API。我们无法在 API 项目中配置和注册 Autofac,而它在 Web 项目上正常工作。

我尝试了几种解决方案,但没有一个有效。


我面临着“ 尝试创建'OperationController'类型的控制器时发生错误。确保控制器具有无参数公共构造函数”的错误

下面提供了代码

启动.cs

public 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 项目。




弑天下
浏览 144回答 1
1回答

泛舟湖上清波郎朗

您使用的是 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));
打开App,查看更多内容
随时随地看视频慕课网APP