2016-08-18 74 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

相关问题