如何在.NET 6单文件启动模板项目中集成Autofac依赖注入
.NET 6 单文件Program.cs接入Autofac 方案
前置校验
- 确认NuGet包安装正确,注意包名拼写:
- 必须安装
Autofac6.3.0及以上版本 - 必须安装
Autofac.Extensions.DependencyInjection7.2.0及以上版本(注意拼写是Dependency不是Dependancy,避免装错包报错)
- 必须安装
- 你当前使用的.NET 6 RC2运行时版本可正常适配该方案。
完整修改后的Program.cs代码
using Autofac; using Autofac.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(args); // 核心配置:接入Autofac服务提供工厂 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); // 配置Autofac容器,注册自定义服务 builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder => { // 此处编写你的Autofac服务注册逻辑,示例: // containerBuilder.RegisterType<DemoService>().As<IDemoService>().InstancePerLifetimeScope(); }); // 原有服务注册逻辑无需修改 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // 原有中间件配置逻辑无需修改 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
适配说明
.NET 6 提供的WebApplicationBuilder已经内置暴露了Host属性,直接调用原有的UseServiceProviderFactory扩展方法即可完成Autofac接入,不需要自己重构为旧版的Host.CreateDefaultBuilder写法,原有服务注册、中间件配置逻辑都可以保留不需要修改。
Autofac会自动接管所有系统内置服务和你自己注册的服务,后续获取服务可以直接通过app.Services获取,和原生用法完全一致。
内容的提问来源于stack exchange,提问作者github-user-202
相关产品推荐
相关产品推荐

