无法将类型为ServiceCollection的对象转换为具有dotnet core和autofac的'Autofac.ContainerBuilder'类型

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

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

    public void ConfigureContainer(ContainerBuilder builder)
    {

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

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

我得到的错误是:

System.InvalidCastException:无法转换类型的对象键入“ Microsoft.Extensions.DependencyInjection.ServiceCollection”'Autofac.ContainerBuilder'。在Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1.ConfigureContainer(HostBuilderContexthostContext,对象containerBuilder)位于Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()在Microsoft.Extensions.Hosting.HostBuilder.Build()在C:\ src \ Program.cs:line 39中的Program.Main(String [] args)

P.S:我了解我要说明的问题是很大的,但是我不知道如何更好地解释它。

c# .net-core autofac
1个回答
2
投票

配置主机时,您应致电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核心将创建一个ServiceCollection而不是一个ContainerBuilder并抛出一个InvalidCastException

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