首页 > 解决方案 > .Net Core Worker 中类的依赖注入

问题描述

我正在尝试在 .Net 核心工作者服务的自定义类中使用 Serilog,但遇到了一些奇怪的问题。我的设置如下:

程序.cs:

        var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();

        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

        try
        {
            Log.Information("====================================================================");
            Log.Information($"Application Starts. Version: {System.Reflection.Assembly.GetEntryAssembly()?.GetName().Version}");
            Log.Information($"Application Directory: {AppDomain.CurrentDomain.BaseDirectory}");
            CreateHostBuilder(args).Build().Run();
        }
        catch (Exception e)
        {
            Log.Fatal(e, "Application terminated unexpectedly");
        }
        finally
        {
            Log.Information("====================================================================");
            Log.CloseAndFlush();
        }

和:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                // configure the app here.
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            })
            .UseSerilog();

到目前为止,一切都很标准。然后我将依赖项注入到 Worker.cs 中,如下所示:

    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

这工作正常 - 我按预期从我在这里所做的调用中获取日志条目。当我创建自定义类的实例时,事情就会失败。因此,在我的 Worker.cs 中,我执行以下操作:

MyCustomProduct cProduct = JsonConvert.DeserializeObject<MyCustomProduct>(response.Content);

因此,我显然采用了 RestSharp 响应并使用 MyCustomProduct 类对其进行反序列化。都好。我以同样的方式将依赖注入到这个类中:

    private readonly ILogger<MyCustomProduct> _logger;

    public MyCustomProduct(ILogger<MyCustomProduct> logger)
    {
        _logger = logger;
    }

但是,当我尝试从此类中调用 _logger.LogInformation (或任何其他函数)时,它失败了,告诉我对 _logger 的引用为空。

我意识到我在这里做了一些根本上愚蠢的事情,但我看不到它......

标签: c#.net-coredependency-injectionserilog

解决方案


推荐阅读