ASP.NETでの呼び出しメソッド名の取得

3146 ワード

この例ではASPについて述べる.NETでは呼び出しメソッド名を取得するテクニックを実装する.皆さんの参考にしてください.具体的な実現方法は以下の通りである.
ログの書き込み機能では、ログ呼び出し元のモジュール名、ネーミングスペース名、クラス名、メソッド名を記録する必要があります.反射(反射についてはパフォーマンスに注意してください)を使用したいのですが、具体的にはどのモジュール名が分からないので、検索して、以下のように整理します.
適切なネーミングスペースを追加する必要があります.

   using System; 
  
using System.Diagnostics;
using System.Reflection;

現在のメソッド名のみを取得する場合は、次のコードを使用します.

   public static void WriteSysLog(int level, string content) 
  
{
    MethodBase mb = MethodBase.GetCurrentMethod();
    string systemModule = Environment.NewLine;
    systemModule += " :" + mb.Module.ToString() + Environment.NewLine;
    systemModule += " :" + mb.ReflectedType.Namespace + Environment.NewLine;
    // ,
    systemModule += " :" + mb.ReflectedType.FullName + Environment.NewLine;
    systemModule += " :" + mb.Name;
 
    Console.WriteLine("LogDate: {0}{1}Level: {2}{1}systemModule: {3}{1}content: {4}", DateTime.Now, Environment.NewLine, level, systemModule, content);
    Console.WriteLine();
}

ただし、一般的には、このログ・メソッドを取得する呼び出し元であるため、次のコードを使用する必要があります(このメソッドはデモのみです).

   public static void WriteSysLog(string content) 
  
{
    const int level = 1000;
 
    StackTrace ss = new StackTrace(true);
    //index:0 ;1 ;2 ,
    MethodBase mb = ss.GetFrame(1).GetMethod();
 
    StackFrame[] sfs = ss.GetFrames();
    string systemModule = Environment.NewLine;
    systemModule += " :" + mb.Module.ToString() + Environment.NewLine;
    systemModule += " :" + mb.DeclaringType.Namespace + Environment.NewLine;
    //
    systemModule += " :" + mb.DeclaringType.Name + Environment.NewLine;
    systemModule += " :" + mb.Name;
 
    Console.WriteLine("LogDate: {0}{1}Level: {2}{1}systemModule: {3}{1}content: {4}", DateTime.Now, Environment.NewLine, level, systemModule, content);
    Console.WriteLine();
}

この点について興味深いのはMainの呼び出し元です

   System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
 

 
に合格

   StackTrace ss = new StackTrace(true); 
  
StackFrame[] sfs = ss.GetFrames();

知ることができるNETプログラムの実行順序:

   System.Threading.ThreadHelper.ThreadStart() 
  
System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)

そしてメソッドMainに入ります.
また、MethodBaseクラスから他にも多くの属性を得ることができ、自分でSystemにナビゲートすることができる.Reflection.MethodBaseが表示します.反射を使用すると、クラスのすべてのプロパティ名、メソッド名、メンバー名を巡回できます.この興味深い例の1つは、反射によって変数値を変数名自体に変換することです.
皆さんのaspについてお話ししたいと思います.Netプログラミングが役立ちます.