2016-08-18 68 views
0

我知道參數無法傳遞給靜態構造函數。但是我用這與參數靜態類,因此我初始化一個變量,我不得不重複的行對於這類功能如何通過靜態構造函數傳遞參數來減少行數

這裏每個使用率是我記錄器類(它使用log4net的,但它不是萬一):

public static class Logger 
    { 
     private static ILog log {get; set;} 
     static Logger() 
     { 
      log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     } 
     public static void Error(object msg, string userip) 
     { 

      log4net.LogicalThreadContext.Properties["ClientIp"] = userip; 
      if (log.IsErrorEnabled) 
      { 
       log.Error(msg); 
      } 
     } 
     public static void Error(object msg, string userip, Exception ex) 
     { 
      log4net.LogicalThreadContext.Properties["ClientIp"] = userip; 

      if (log.IsErrorEnabled) 
      { 
       log.Error(msg, ex); 

如你所想我必須爲所有類型的日誌方法添加自定義的「ClientIp」字段。但我不想重複

log4net.LogicalThreadContext.Properties [「ClientIp」] = userip;

線每個 我希望我可以編輯這樣的構造方法:

static Logger() 
      { 
       log4net.LogicalThreadContext.Properties["ClientIp"] = userip; 
       log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
      } 

,但我不能傳遞參數靜態構造函數..任何建議嗎?

+0

只需創建一個靜態屬性,並在開始處設置類似於'public static string UserIP {get; set;}' –

+0

userip參數從哪裏來?它每次調用都不會改變嗎? – Chris

+0

@CallumLinington這是我現在正在嘗試,但在httpcontext.current有點麻煩..給我一些時間 – TyForHelpDude

回答

0

創建一個Initialize方法,您只能調用一次:啓動時。傳入您只需設置一次的變量。在隨後的所有調用中,您都可以重用這些值。

+0

你能詳細說明你的文章嗎? – TyForHelpDude

相關問題