web-dev-qa-db-ja.com

'System.IServiceProviderを返すConfigureServicesはサポートされていません。'

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);
}
_

この問題を解決するにはどうすればよいですか?

16
mr-dortaj

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+

18
Nkosi