【问题标题】:How can I use Autofac in .NET core console generic host?如何在 .NET 核心控制台通用主机中使用 Autofac?
【发布时间】:2021-11-17 14:40:30
【问题描述】:

我有使用通用主机的 .NET 核心控制台应用程序。我有工作类(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"));

            });

}

【问题讨论】:

    标签: c# .net .net-core dependency-injection autofac


    【解决方案1】:
    1. 安装Autofac.Extensions.DependencyInjection
    2. 将此调用添加到构建主机的过程中-> .UseServiceProviderFactory(new AutofacServiceProviderFactory())
    3. 在构建主机的过程中添加ConfigureContainer&lt;ContainerBuilder&gt;(...)并定义你的依赖项

    a sample for this as well

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2018-06-30
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多