如何在.NET Core控制台通用主机中使用Autofac?

3

我有一个使用泛型主机的.NET core控制台应用程序。我有一个工作类(ImageFileWatcher)和额外的类(ThumbnailProcessor),以及它的接口(IThumbnailProcessor)。我想使用Autofac实现来进行依赖注入,而不是通常的DI实现。我该怎么做?这是我的program.cs代码:

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .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"));

            });

}
1个回答

6
  1. 安装 Autofac.Extensions.DependencyInjection
  2. 在创建主机的过程中,加入以下语句 -> .UseServiceProviderFactory(new AutofacServiceProviderFactory())
  3. 在创建主机的过程中添加 ConfigureContainer<ContainerBuilder>(...) 来定义你的依赖项

这里也提供了相应示例代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接