无法使用 dotnet 核心和 autofac 将 ServiceCollection 类型的对象转换为类型 'Autofac.ContainerBuilder'

Unable to cast object of type ServiceCollection to type 'Autofac.ContainerBuilder' using dotnet core and autofac

我正在尝试在我的 dotnet core 3.1 项目中使用 autofac,但是在 startup.cs 文件中写入 ConfigureContainer 后我无法 运行 项目.

    public void ConfigureContainer(ContainerBuilder builder)
    {

        var databaseConnectionString = Configuration.GetConnectionString("Database");

        builder.RegisterModule(new MediatorModule());
        builder.RegisterModule(new ApplicationModule(databaseConnectionString));
    }

我得到的错误是:

System.InvalidCastException: Unable to cast object of type
'Microsoft.Extensions.DependencyInjection.ServiceCollection' to type 'Autofac.ContainerBuilder'. at Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1.ConfigureContainer(HostBuilderContext hostContext, Object containerBuilder) at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() at Microsoft.Extensions.Hosting.HostBuilder.Build() at Program.Main(String[] args) in C:\src\Program.cs:line 39

配置主机时,您应该调用 UseServiceProviderFactory(new AutofacServiceProviderFactory())

public static void Main(string[] args)
{
    // ASP.NET Core 3.0+:
    // The UseServiceProviderFactory call attaches the
    // Autofac provider to the generic hosting mechanism.
    var host = Host.CreateDefaultBuilder(args)
                   .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                   .ConfigureWebHostDefaults(webHostBuilder => {
                       webHostBuilder
                        .UseContentRoot(Directory.GetCurrentDirectory())
                        .UseIISIntegration()
                        .UseStartup<Startup>();
                   })
                   .Build();

    host.Run();
}

如果没有这个,.net core 将创建一个 ServiceCollection 而不是 ContainerBuilder 并且将抛出一个 InvalidCastException