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

'ConfigureServices returning an System.IServiceProvider isn't supported.' in .NET Core 3.1 using Autofac

我想使用 autofac 注入而不是默认的 .net 核心解决方案。

这是我的启动文件:

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 3.0 中,ASP.NET 核心托管模型发生了变化,您不能再 return IServiceProviderThis is documented in the Autofac docs for integrating with ASP.NET Core 3.0+.

您必须将 ConfigureServices 设为无效,如果您想直接使用 Autofac 注册内容,则需要使用 ConfigureContainer。您还需要在构建主机时在 Program.Main 方法中注册 AutofacServiceProviderFactory。文档中有示例说明如何执行此操作。