autofac - 使用新的单文件模板将 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
解决方案
我找到了这个。 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();
推荐阅读
- pega - 如何以 pega,YY-mm-dd 格式获取当前日期
- java - 使用 aws lambda java 检查用户是否存在于组中
- linux - 返回符号链接时 ../../ 是什么意思?
- serialization - Xamarin Forms - 序列化/反序列化不起作用
- binary - 当两个变量进行逻辑比较时,检验等价的逻辑门是?使用逻辑门
- azure - 如果超时超过 10 分钟,Python Azure Functions 会发出警报
- multithreading - 不同线程上的 Quarkus 事务
- macos - 如果我恢复我的 mac,我的颤振应用程序会发生什么?
- powershell - 如何使用 Terraform 用户数据动态重命名 Autoscaling 组中的 EC2 Windows 主机?
- nginx - 得到“您需要启用 JavaScript 才能运行此应用程序。” 使用 ngix 反向代理