是否有一种方法可以在扩展方法中获得ILogger实例?



我有一个带有扩展方法的静态类。它曾经是一个常规类,所以我利用构造函数注入来注入ILogger以在方法中进行日志记录。

在将方法转换为扩展方法之后,由于类的静态特性,我最初将ILogger作为参数添加。

public static string Overflow(this string message, ..., ILogger logger = null)
{
...
logger?.LogInformation("Stack");
}

但是必须在调用扩展方法时传递ILogger的实例作为参数已经变得很累人了。应该注意的是,在这些方法中进行日志记录很方便,但不是必需的,因此,我只希望在注册了logger实例的情况下进行日志记录。

是否有办法在扩展方法中获得ILogger的实例?

像这样

public static string Overflow(this string message, ...)
{
...
// Log if there is a registered logger instance available
}

你可以…

  1. 使用静态构造函数在静态类中创建ILogger,但这可能会很痛苦,因为静态构造函数不能接受参数,所以您必须从头构建ILogger。

  2. 创建一个单独的类,其中包含您想要的iloglogger,并在该类上编写静态函数来访问该logger。然后从扩展方法内部调用这些函数。在我称之为"日常工作"的地方,我们也做着类似的事情。我们有一个具有日志记录器的静态类,因此我们几乎可以在任何地方调用MyCompanyLogger.LogInformation(...)

最新更新