2016-09-02 14 views
0

次のコードは、呼び出しを飾るためにusingステートメントを使用してSerilogロギングへの呼び出しをラップします。私はILoggerだけをActionに渡すことができるようにしたい。 _loggerはILoggerを実装しています。タイプ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 

私がやっているよりもスマートな方法があれば、それを提供しても構いません。

答えて

1

あなたはILoggerを「渡している」わけではありません。ランダムなことを行うことができるラムダを渡しています。

あなたのような何かを行うことができます:

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

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

それともAuditLoggerが独立して構築されている場合、あなたは、コンストラクタとメソッドにちょうど行動に_loggerに渡すことができます。

+0

大変感謝!!! – Jafin

関連する問題