“不支持返回 System.IServiceProvider 的 ConfigureServices。”
'ConfigureServices returning a System.IServiceProvider isn't supported.'
我需要在 ASP 核心 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 的启动语法已更改
除了在主机构建器上使用以下内容
.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+
您可以使用 WebHost
而不是 Program.cs 中的 Host
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
在这种情况下,以下代码有效
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return new AutofacServiceProvider(container);
}
在 Program.cs
中使用 WebHost 而不是 Host
对我有用...
你必须改变program.c
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(options => options.ClearProviders())
.UseStartup<Startup>();
我需要在 ASP 核心 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 的启动语法已更改除了在主机构建器上使用以下内容
.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+
您可以使用 WebHost
Host
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
在这种情况下,以下代码有效
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return new AutofacServiceProvider(container);
}
在 Program.cs
中使用 WebHost 而不是 Host对我有用...
你必须改变program.c
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(options => options.ClearProviders())
.UseStartup<Startup>();