确保 Action 上的类型以实现 ILogger 类型

Ensure the type on the Action to implement type ILogger

以下代码使用 using 语句包装对 Serilog 日志记录的调用以修饰调用。我希望确保只能在 Action 中传递 ILogger 类型。 _logger 实现 ILogger。

 public class AuditLogger : IAuditLogger
{
    public void Audit(Action logger)
    {
        using (LogContext.PushProperty("EventType", "Audit"))
        {
            logger.Invoke();
        }
    }
}

_auditLogger.Audit(()=>_logger.Information("Edit User {UserId}",id));
//_auditLogger implements ILogger

如果有比我正在做的更聪明的方法,请随时提供。

你不是 "passing in" ILogger,你传递的是一个可以做任何随机事情的 lambda。

你可以这样做:

Audit(ILogger logger, Action<ILogger> action)
{
   action(logger);
}

Audit(_logger, x => x.Information(...));

或者,如果 AuditLogger 是独立构建的,您可以将 _logger 传入构造函数,并将操作传入方法。