如何在 .NET 中以 SOLID 方式实施库级跟踪和诊断?

How can I implement library level tracing and diagnostics in a SOLID manner in .NET?

在创建专为在更大范围内重用而设计的企业库时,我经常发现自己因实施横切设计问题而陷入僵局,因为这些问题真的很难做到正确。今天,我坚持分析在可重用企业库中进行跟踪和诊断的最佳方式。

环顾 .NET 的 BCL,日志记录和诊断似乎是框架的一个重要部分。

一种对我有意义的可能性是在我的基础域库中简单地定义一些常见的日志记录接口,并允许应用程序通过某种环境上下文模式注入实现,但为此定义我自己的日志记录类型似乎没有必要.

One possibility that makes sense to me is to simply define in my foundation domain library some common logging interfaces.

这是正确的。此外,您还必须创建一个默认记录器实现,该实现可能针对例如系统诊断跟踪 class(以防此库的消费者应用程序打开跟踪)。

allow applications to inject implementations via some sort of ambient context pattern

与其纠结于其他人将如何注入记录器,不如简单地提供一种方法,例如自定义工厂注入记录器接口的实现。

工厂将负责提供库中的实例。如果提供了实现,则使用该实现,否则默认实例应用作默认记录器。您可以查看 EF7 library(logging) for infrastructure of logger.