小编Cha*_*d K的帖子

使用依赖注入的 ILogger<T> 的基类类型

我有一个执行一些工作的基类,包括日志记录。我在构造函数中注入了一个 ILogger 依赖项

public abstract class BaseClassExample
{
    protected readonly ILogger<BaseClassExample> logger;

    public class BaseClassExample(ILogger<BaseClassExample> logger)
    {
        this.logger = logger;
    }
}

Run Code Online (Sandbox Code Playgroud)

我想让类实现 BaseClassExample,并且也做自己的工作,包括日志记录。

public class DerivedClass : BaseClassExample
{
    protected readonly ILogger<DerivedClass> logger;

    public class BaseClassExample(ILogger<DerivedClass> logger)
    {
        this.logger = logger;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是做事的正确方式吗?我应该获取实现类的类型来记录基类吗?我应该有一个单独的记录器实例(使用 DerivedClass 的类型)还是尝试使用与基类相同的实例?

c# dependency-injection .net-core

9
推荐指数
1
解决办法
3251
查看次数

如何将 ILogger&lt;T&gt; 传递到使用 new 创建的对象中?

我想将记录器传递到对象的构造函数中。通常,记录器是依赖注入到类中的,但我想记录到没有依赖注入的类中。

我有一个 .NET Core 辅助服务。在该服务中,我有 0 个在运行时创建的类实例。我还希望能够将消息记录到该类内的记录器中。

在我的示例中,我可以传递从 TimedWorker 内部获取的 ILogger,但类型错误。

目前,我有:

    class TimedWorker : BackgroundService
    {
        private List<Dog> m_dogs;
        private ILogger<TimedWorker> m_logger;
        private IConfiguration m_configuration;

        public TimedWorker(ILogger<TimedWorker> logger, IConfiguration configuration)
        {
            m_logger = logger;
            m_configuration = configuration;
        }

        public override Task StartAsync(CancellationToken cancellationToken)
        {
            m_dogs= new List<Dogs>();
            List<DogOption> dogOptions= new List<DogOption>();
            m_configuration.GetSection("Dogs").Bind(dogOptions);

            foreach(DogOption option in dogOptions)
            {
                m_dogs.Add(new Dog(option, m_logger));
            }
        } 

    ///...

    }

    class Dog {
        public string Name { get; }
        private int Age;
        private ILogger m_logger; …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection .net-core

7
推荐指数
1
解决办法
7676
查看次数

.NET 5/6 - UseSystemd() 实际上做了什么?

我有一个 .NET API,其中包含一些工作服务,我将其部署在 CentOS 8 服务器上。我知道 Microsoft.Extensions.Hosting 包中有一个名为 UseSystemd() 的函数,该函数应该帮助它在 Systemd 上运行。我无法弄清楚它实际上做了什么或启用了什么。

我已将 .NET 5 api 升级到 .NET 6,但我不知道该把它放在哪里,所以我没有添加它。我的 .NET 5 api 中没有它,但它工作得很好。

我的包已部署,并使用 Systemd 服务(没有 Systemd())运行它,并且运行得很好。它像平常一样检测崩溃,我可以使用journalctl查看日志

所以,看来我不需要。它实际上有什么作用?

.net systemd .net-core .net-5 .net-6.0

6
推荐指数
1
解决办法
817
查看次数

标签 统计

.net-core ×3

c# ×2

dependency-injection ×2

.net ×1

.net-5 ×1

.net-6.0 ×1

systemd ×1