ASPコア3.0でこれを使用する必要がありますAutoFac
起動時にこのコードを使用すると:
_public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddControllers();
return services.BuildAutofacServiceProvider();
}
_
それは私にこのエラーを示しています:
「System.IServiceProviderを返すConfigureServicesはサポートされていません。」
そして、私はこれで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);
}
_
この問題を解決するにはどうすればよいですか?
Autofac for ASP.NET Core 3.0以降を構成するためのスタートアップ構文が変更されました
ホストビルダーで以下を使用することに加えて
.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) {
//configure auto fac here
builder.AddService();
//...
}
リファレンス Autofacドキュメント for ASP.NET Core 3.0+