【问题标题】:'ConfigureServices returning an System.IServiceProvider isn't supported.' in .NET Core 3.1 using Autofac“不支持返回 System.IServiceProvider 的配置服务。”在 .NET Core 3.1 中使用 Autofac
【发布时间】:2020-10-05 02:37:19
【问题描述】:

我想使用 autofac 注入而不是默认的 .net 核心解决方案。

这是我的启动文件:

public IServiceProvider ConfigureServices(IServiceCollection 服务)
{
    services.AddMvc(option => option.EnableEndpointRouting = false) ;
           

    var cb = new ContainerBuilder();
    cb.RegisterModule();
    cb.填充(服务);
    var 容器 = cb.Build();

    返回新的 AutofacServiceProvider(容器);
}


// 这个方法被运行时调用。使用此方法配置 HTTP 请求管道。
公共无效配置(IApplicationBuilder 应用程序,IWebHostEnvironment env)
{
    app.UseDeveloperExceptionPage();
    app.UseStatusCodePages();
    app.UseStaticFiles();
         
    app.UseMvc(routes=>routes.MapRoute("default","/{controller=home}/{action=index}"));
}

这是我的 program.cs

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}
    
公共静态 IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup();
    }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

但是当我运行我的应用程序时,我的 main 方法中出现了这个错误:

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

【问题讨论】:

    标签: asp.net-core .net-core dependency-injection autofac


    【解决方案1】:

    在 ASP.NET Core 3.0 中,ASP.NET Core 托管模型发生了变化,您不能再返回 IServiceProviderThis is documented in the Autofac docs for integrating with ASP.NET Core 3.0+.

    您必须将您的ConfigureServices 切换为无效,如果您想直接使用 Autofac 注册内容,您需要使用ConfigureContainer。您还需要在构造主机时在您的Program.Main 方法中注册AutofacServiceProviderFactory。文档中的示例显示了如何执行此操作。

    【讨论】:

    • 谢谢,我定义了另一个容器,它工作了。
    猜你喜欢
    • 2020-01-27
    • 2020-06-23
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    相关资源
    最近更新 更多