Невозможно привести объект типа ServiceCollection к типу 'Autofa c .ContainerBuilder', используя do tnet core и autofac. - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь использовать 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' к типу 'Autofa c .ContainerBuilder'. в Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1.ConfigureContainer (HostBuilderContext hostContext, Object containerBuilder) в Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider () в Microsoft.Extensions.Hosting.HainBilter Строка [] args) в C: \ src \ Program.cs: строка 39

1 Ответ

8 голосов
/ 10 января 2020

Когда вы настраиваете свой хост, вы должны звонить 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 будет выброшены.

...