在.NET Core 3.1中,使用Autofac的'ConfigureServices返回System.IServiceProvider不支持。

问题描述 投票:0回答:1

我想使用autofac injection代替默认的.net core解决方案。

这是我的启动文件。

 public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option => option.EnableEndpointRouting = false) ;


            var cb = new ContainerBuilder();
            cb.RegisterModule<mydependecymodule>();
            cb.Populate(services);
            var container = cb.Build();

            return new AutofacServiceProvider(container);
        }


        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)                           
        {
            app.UseDeveloperExceptionPage();
            app.UseStatusCodePages();
            app.UseStaticFiles();

            app.UseMvc(routes=>routes.MapRoute("default","/{controller=home}/{action=index}"));
        }

下面是我的program.cs

public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

但是当我运行我的应用程序时,我在我的主方法中得到这个错误。

System.NotSupportedException: 'ConfigureServices returning an System.IServiceProvider isn't supported.'
asp.net-core .net-core dependency-injection autofac
1个回答
2
投票

在ASP.NET Core 3.0中,ASP.NET Core的托管模型发生了变化,你不能返回一个 "服务"。IServiceProvider 不再是。这在Autofac文档中被记录下来,用于集成ASP.NET Core 3.0+。.

你必须切换你的 ConfigureServices 是无效的,如果你想直接在Autofac注册东西,你需要使用 ConfigureContainer. 您还需要注册 AutofacServiceProviderFactory 在你 Program.Main 方法。文档中有一些例子展示了如何做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.