我正在编写一个 C# 库,并试图弄清楚如何最好地进行日志记录。我希望我的库在有和没有 DI 的情况下都可以使用。
假设我的库有一个名为的主要公共类Foo
,它通过其构造函数接受IBar
依赖项,但也有一个硬连接的私有类型成员Qux
(一个内部类)。
为了使我的库日志框架不可知,我相信最佳实践是将 an 传递ILogger<Foo>
给 的构造函数Foo
,并将 anILogger<BarImpl>
传递给IBar
.
我的问题是,应该Qux
使用ILogger<Foo>
记录器,还是应该有自己的记录器ILogger<Qux>
?如果是这样,如何Foo
创建一个ILogger<Qux>
传递给Qux
?
public interface IBar {}
public class BarImpl : IBar
{
public BarImpl(ILogger<BarImpl> logger)
{
}
}
internal class Qux
{
public Qux(ILogger<Qux> logger) // should Qux accept ILogger<Qux> or ILogger<Foo>?
{
}
}
public class Foo
{
private Qux _qux;
public Foo(IBar bar, ILogger<Foo> logger)
{
// how to create ILogger<Qux> here?
// _qux = new Qux();
}
}