TraceAttributeログファイルに書き込むために、各クラスでPostSharpを使用しています。新しい要件は、各ログエントリの前に。を追加できるようにすることSessionIDです。
ただし、PostSharpはこのように機能しないようです。私は自分にとって意味のある2つのアプローチを試しましたが、どちらも機能しませんでした。
#1を試す
コンストラクターに文字列パラメーターを追加して、メソッドとメソッドTraceAttributeに渡されて使用されます。OnEntryOnExitOnException
private readonly string _sessionID;
public TraceAttribute(string sessionID)
{
_sessionID = sessionID;
logger = new Logger();
}
public override void OnExit(MethodExecutionArgs args)
{
logger.LogMethodExit(string.Format("Session {0} Exiting {1}.{2}", _sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}
私のコントローラーは元々[Trace]属性で装飾されていて、このアプローチに変更しました...
[Trace(HttpContext.Session.SessionID)]
HttpContextは静的コンテキストでは使用できないため、これは機能しません。
そのため、そのアイデアは窓の外にあります。
#2を試す
だから私の次の試みは、単純にsessionId変数をローカルで各メソッドに作成することでしたTraceAttribute...
public override void OnEntry(MethodExecutionArgs args)
{
var sessionID = HttpContext.Current.Session.SessionID;
logger.LogMethodEntry(string.Format("Session {0} Entering {1}.{2}", sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}
これもまた機能しません。これはHttpContextまだ利用できずnull、ソリューションを実行するとすぐに実行時にオブジェクトになります。
#3を試す
public override void OnEntry(MethodExecutionArgs args)
{
string sessionID = "Not initialized";
if (HttpContext.Current.Session.SessionID != null)
sessionID = HttpContext.Current.Session.SessionID;
logger.LogMethodEntry(string.Format("Session {0} Entering {1}.{2}", sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}
TraceAttributeこの方法でPostSharpで織り込まれたセッション情報を取得する方法はありますか?この目標を達成できるいくつかの回避策はありますか?