代码之家  ›  专栏  ›  技术社区  ›  Brian

在静态方法中使用Castle Windor的测井设备

  •  0
  • Brian  · 技术社区  · 15 年前

    我没能找到很多关于Castle伐木设施的好文件,但是我读了 here 给我足够的工作时间。不过,我有一个问题,在无法使用属性的情况下,如何获取记录器。我能想到的两个例子是静态方法或结构内部。

    本设施任何有用文件的奖励积分。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mauricio Scheffer    15 年前

    只需从底层日志实现中获取记录器,例如,对于log4net:

        private static readonly ILog logger = LogManager.GetLogger(typeof(MyClass));
    

    在这种情况下使用容器更复杂,而且毫无意义。

    Logging facility docs are here .

        2
  •  0
  •   wageoghe    15 年前

    我现在不使用Castle或任何其他DI/IOC,所以我不能评论其有效性,也不能记录静态或结构…

    尽管如此,从静态方法(在非静态类上)记录日志似乎并不太困难。可能很俗气,但我想你可以这样做:

    public class MyClass
    {
      private ILogger logger = NullLogger.Instance;
      private static ILogger staticLogger;
    
      public ILogger Logger 
      { 
        get
        {
          return logger;
        }
        set 
        {
          logger = value; 
          if (staticLogger == null)
          {
            staticLogger = value;
          }
        }
      }
    
      public void MyMethod()
      {
        logger.Info("Hello from instance method!");
      }
    
      public static void MyStaticMethod()
      {
        staticLogger.Info("Hello from static method!");
      }
    }
    

    在注入真正的记录器之前,可能必须小心不要使用静态记录器记录。