首页 > 解决方案 > 使用新的单文件模板将 Autofac 添加到 .NET core 6.0

问题描述

我正在尝试将 Autofac 添加到 .Net 6.0 Web API。我正在使用生成单个启动 Program.cs 文件的最新 ASP.NET Core Web API 模板。

安装的 Autofac 版本:

Autofac 6.3.0
Autofac.Extensions.DependancyInjection (7.2.0-preview.1)

安装的 .Net 6.0 版本:

Microsoft.AspNetCore.App 6.0.0-rc.2.21480.10
Microsoft.NETCore.App 6.0.0-rc.2.21480.5
Microsoft.WindowsDesktop.App 6.0.0-rc.2.21501.6

以防万一,这是 Program.cs 文件的全部内容(是的,没有命名空间或类定义。​​只有 Program.cs 文件,没有 StartUp 类或 Startup.cs 文件)

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run()

我试过查看最新的 Autofac 文档,但那里的示例,尽管说 .Net Core 3.x 及更高版本似乎不适合 .Net 6.0 代码。我不知道如何将 Autofac 添加到中间件管道中。

任何帮助是极大的赞赏。

来自 Autofac 网站的代码片段

public class Program
{
  public static void Main(string[] args)
  {
    // ASP.NET Core 3.0+:
    // The UseServiceProviderFactory call attaches the
    // Autofac provider to the generic hosting mechanism.
    var host = Host.CreateDefaultBuilder(args)
        .UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .ConfigureWebHostDefaults(webHostBuilder => {
          webHostBuilder
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>();
        })
        .Build();

    host.Run();
  }
}

Autofac 文档:

https://docs.autofac.org/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

标签: autofacasp.net-core-6.0

解决方案


我找到了这个。 https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60-samples?view=aspnetcore-5.0


var builder = WebApplication.CreateBuilder(args);

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));

var app = builder.Build();



推荐阅读