You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Core控制台泛型主机中使用Autofac替代默认DI容器?

替换步骤
  • 首先安装Autofac适配.NET泛型主机的依赖包
    你可以通过NuGet包管理器搜索安装Autofac.Extensions.DependencyInjection,也可以执行命令安装:
dotnet add package Autofac.Extensions.DependencyInjection
  • 其次修改Program.cs中的CreateHostBuilder配置,添加Autofac服务提供工厂即可完成替换
    你原本在ConfigureServices中注册的服务不需要修改,Autofac会自动合并默认DI容器中的所有服务注册,如果你需要使用Autofac的专属特性(比如命名注册、属性注入、拦截器等),可以新增ConfigureContainer<ContainerBuilder>配置块来写Autofac风格的注册逻辑。

修改后的完整代码如下:

using Autofac;
using Autofac.Extensions.DependencyInjection;
// 保留你原有项目的其他using引用即可

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            // 新增此行,替换默认服务提供器为Autofac
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            // 可选:添加Autofac专属注册块,需要用Autofac高级特性时添加即可
            .ConfigureContainer<ContainerBuilder>(builder =>
            {
                // 示例:把IThumbnailProcessor的注册挪到Autofac块实现,也可以保留原来的注册逻辑
                // builder.RegisterType<ThumbnailProcessor>().As<IThumbnailProcessor>().SingleInstance();
            })
            .ConfigureAppConfiguration((hostContext,configBuilder) =>
            {
                configBuilder.AddEnvironmentVariables(prefix: "ImageService_");
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<ImageFileWatcher>();

                services.AddSingleton<IThumbnailProcessor, ThumbnailProcessor>();

                var config = hostContext.Configuration;

                services.AddOptions<ImageConfig>()
                    .Configure(imageConfig =>
                    {
                        imageConfig.CompressionLevel = 0.99M;
                    })
                    .Bind(config.GetSection(nameof(ImageConfig)));

                services.AddOptions<ImageSizeConfig>(ImageSizeConfig.Thumbnail)
                    .Configure(thumbnailSizeConfig =>
                    {
                        thumbnailSizeConfig.FilePrefix = "thumb-";
                    })
                    .Bind(config.GetSection("ImageConfig:thumbnail"));

                services.Configure<ImageSizeConfig>(ImageSizeConfig.Medium, config.GetSection("ImageConfig:medium"));
                services.Configure<ImageSizeConfig>(ImageSizeConfig.Large, config.GetSection("ImageConfig:large"));

            });
}

配置完成后启动项目即可正常使用Autofac作为DI容器,你原有项目的构造函数注入等逻辑不需要做任何修改。

内容的提问来源于stack exchange,提问作者bmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:39:04