这可能在某种程度上与 在 AspNet 内核中将 ILogger 或 ILoggerFactory 传递给构造函数?有关,但是这是关于 图书馆设计的,而不是关于使用这些库的实际应用程序如何实现它的日志记录。
我正在写一个。Net 标准2.0库,将通过 Nuget 安装,并允许人们使用该库获得一些调试信息,我依赖于 微软。扩展。日志记录。抽象,以允许一个标准的日志器被注入。
但是,我看到了多个接口,而且 Web 上的示例代码有时使用 ILoggerFactory
并在类的 ctor 中创建一个日志记录器。还有 ILoggerProvider
,它看起来像是工厂的只读版本,但是实现可能实现也可能不实现这两个接口,所以我必须选择。(工厂似乎比提供者更常见)。
我看到的一些代码使用非通用的 ILogger
接口,甚至可能共享同一个日志记录器的一个实例,还有一些代码在其 ctor 中使用 ILogger<T>
,并期望 DI 容器支持开放的通用类型或者显式注册我的库使用的每个 ILogger<T>
变体。
现在,我确实认为 ILogger<T>
是正确的方法,也许一个 ctor 不接受这个参数,而只是传递一个 Null Logger。这样,如果不需要日志记录,就不需要使用日志记录。然而,一些 DI 容器选择了最大的 ctor,因此无论如何都会失败。
我很好奇我在 假设这里要做什么来为用户创建最少的麻烦,同时仍然允许适当的日志支持,如果需要的话。