C# 不为类型'提供服务;IServiceProviderFactory[Autofac.ContainerBuilder]&x27;已注册

C# 不为类型'提供服务;IServiceProviderFactory[Autofac.ContainerBuilder]&x27;已注册,c#,asp.net-core,entity-framework-core,autofac,C#,Asp.net Core,Entity Framework Core,Autofac,运行以下命令以添加数据库迁移脚本时,出现以下错误: dotnet ef migrations add InitialCreate -v -o .\Migrations\ --context MyContext 访问Microsoft.Extensions.Hosting服务时出错。在没有应用程序服务提供商的情况下继续。错误:未注册类型“Microsoft.Extensions.DependencyInjection.IServiceProviderFactory`1[Autofac.Conta

运行以下命令以添加数据库迁移脚本时,出现以下错误:

dotnet ef migrations add InitialCreate -v -o .\Migrations\ --context MyContext
访问Microsoft.Extensions.Hosting服务时出错。在没有应用程序服务提供商的情况下继续。错误:未注册类型“Microsoft.Extensions.DependencyInjection.IServiceProviderFactory`1[Autofac.ContainerBuilder]”的服务

我遵循了文档。
启动
类的实现如下:

公共类启动
{
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
配置=配置;
WebHostingEnvironment=env;
var builder=new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:true,重载更改:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables();
this.Configuration=builder.Build();
}
public void配置服务(IServiceCollection服务)
{
服务
.AddMvc(选项=>options.EnableEndpointRouting=false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
AddCustomDbContext(配置);
services.AddOptions();
}
公共void配置容器(ContainerBuilder生成器)
{ }
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseMvc();
配置事件总线(app);
}
}
有没有想过是什么原因导致了错误,以及我如何修复它

版本:

<TargetFramework>netcoreapp3.1</TargetFramework>
<PackageReference Include="Autofac" Version="4.9.4" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="5.0.1" />
netcoreapp3.1

配置服务
替换为以下内容:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc(options => options.EnableEndpointRouting = false)
        .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

    services.AddCustomDbContext(Configuration);
    services.AddOptions();

    var container = new ContainerBuilder();
    container.Populate(services);
    return new AutofacServiceProvider(container.Build());
}
请注意,这完全与相矛盾,但这是解决问题所必需的

将服务添加到集合中。不要构建或返回任何IServiceProvider,否则将不会调用ConfigureContainer方法


您必须在Program.cs中配置Autofac:

var hostBuilder = new WebHostBuilder()
            .UseContentRoot(Path.GetDirectoryName(path))
            .ConfigureServices(services => services.AddAutofac())
            .ConfigureAppConfiguration(cb =>
            {
                cb.AddJsonFile("appsettings.json", optional: false).AddEnvironmentVariables();
            }).UseStartup<Startup>();
var hostBuilder=new WebHostBuilder()
.UseContentRoot(路径.GetDirectoryName(路径))
.ConfigureServices(服务=>services.AddAutofac())
.ConfigureAppConfiguration(cb=>
{
cb.AddJsonFile(“appsettings.json”,可选:false);
}).UseStartup();

return Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(新的AutofacServiceProviderFactory())
.ConfigureAppConfiguration((builderContext,config)=>
{
config.AddJsonFile(“appsettings.json”,可选:true);
})
.ConfigureWebHostDefaults(webBuilder=>
{   
webBuilder.UseStartup();
});

您能否共享
AddCustomDbContext
?当然,请查看更新的问题。这意味着您使用的是较旧版本的.net core。最新版本的.net core不允许
ConfigureServices
返回
IServiceProvider
。有意思的是,请检查
兼容性版本。版本3\u 0
我在问题中添加的版本。不确定它们是否是最新的主要版本。
 return Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureAppConfiguration((builderContext, config) =>
            {
                config.AddJsonFile("appsettings.json", optional: true);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {   
                webBuilder.UseStartup<Startup>();
            });