gpt4 book ai didi

c# - “不支持返回 System.IServiceProvider 的 ConfigureServices。”

转载 作者:太空狗 更新时间:2023-10-30 00:37:08 27 4
gpt4 key购买 nike

我需要在 ASP core 3.0 中使用这个 AutoFac

当我在启动时使用这段代码:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddControllers();
return services.BuildAutofacServiceProvider();
}

它告诉我这个错误:

'ConfigureServices returning an System.IServiceProvider isn't supported.'

然后我将 program.cs 更改为:

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

但是没有解决。

这是 BuildAutofacServiceProvider() 代码:

public static IServiceProvider BuildAutofacServiceProvider(this IServiceCollection services)
{
var ContainerBuilder = new ContainerBuilder();
ContainerBuilder.Populate(services);
ContainerBuilder.AddService();
var container = ContainerBuilder.Build();

return new AutofacServiceProvider(container);
}

我该如何解决这个问题?

最佳答案

为 ASP.NET Core 3.0+ 配置 Autofac 的启动语法已更改

除了在host builder上使用以下内容

.UseServiceProviderFactory(new AutofacServiceProviderFactory())

Startup中执行以下格式

public void ConfigureServices(IServiceCollection services) {
//... normal registration here

// Add services to the collection. Don't build or return
// any IServiceProvider or the ConfigureContainer method
// won't get called.

services.AddControllers();
}

// ConfigureContainer is where you can register things directly
// with Autofac. This runs after ConfigureServices so the things
// here will override registrations made in ConfigureServices.
// Don't build the container; that gets done for you. If you
// need a reference to the container, you need to use the
// "Without ConfigureContainer" mechanism shown later.
public void ConfigureContainer(ContainerBuilder builder) {
// Register your own things directly with Autofac
builder.AddMyCustomService();

//...
}

引用 Autofac documentation适用于 ASP.NET Core 3.0+

关于c# - “不支持返回 System.IServiceProvider 的 ConfigureServices。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com