私はあなたが認証されたユーザーの身元を意味するユーザーIDを前提としています。
この情報はコントローラ内ですでに利用可能なため、渡す必要はありません。ユーザーのIPアドレスについては
User.Identity.Name
:現在のユーザーのために
Request.UserHostAddress
しかし、ロギングは通常、アプリケーションの幅です。 System.Webに依存することなく、アプリケーションのすべての領域で使用できるロガーインタフェースを作成する必要があります。例えば
:
public interface ILogger {
void Log(string message);
}
その後、ユーザーIDとIPアドレスを取得するには、現在のHttpContextを呼び出し、このの実装を作成することができます。
public class MyLogger : ILogger {
public void Log(string message) {
var sb = new StringBuilder();
var context = HttpContext.Current;
if (context != null) {
sb.AppendLine("User: " + context.User.Identity.Name);
sb.AppendLine("IP: " + context.Request.UserHostAddress);
}
sb.AppendLine("Message: " + message);
// store the message somewhere (db, file).
// e.g. messageRepository.Save(sb.ToString());
}
}
次にあなたがちょうどあなたのIoCコンテナがあなたのために注入し、その後、ちょうどlogger.Log("some message")
を呼び出すことができますILoggerです、依存を取る(どこでも、あなたのアプリケーションに)何かをログに記録する必要があるとき。
はい、これは依存性注入とインターフェイスに対するプログラミングを使用していることを前提としていますが、そうする必要があります。