在没有引用传递的情况下记录整个类库

时间:2011-11-08 14:38:49

标签: c# .net logging class-library

我在C#中有一个类库,它为我做了很多不同的功能。我希望能够在整个类中进行日志记录,但是,我真的不想在整个过程中传递日志记录库的实例。

e.g。

public void MyMethod(LoggingClass logger)
{
  logger.log("something");
}

public void MyMehtod2(LoggingClass logger)
{
  logger.log("something else");
}

我在这个图书馆的每个地方都有课程,我正在努力做好这个。我一直在寻找与Ninject的依赖注入,但似乎无法理解它应该如何工作。

总而言之,我希望能够拥有一个日志记录类,并且能够实例化一次,然后在任何地方使用它来记录。

3 个答案:

答案 0 :(得分:5)

我认为不需要单身人士。只需在库中使用静态类:

internal static class Logger {

static Logger() {

    // configure logger

}

internal static void Log(string Message, params object[] args) {

    var message = string.Format(Message, args);
    //  write message

}

答案 1 :(得分:1)

我的偏好是实现@IAbstract提到的一些静态类的扩展方法。如果你的类都实现了你自己的ILog接口,你可以这样做:

public static void Log(this ILog source, string message)
{
    source.Log(message, null);
}

public static void Log(this ILog source, string message, param object[] args)
{
    // Assuming a static class as mentioned by @IAbstract
    Logger.Log(message, args);
}

然后在您的课程中或根据保护级别从哪里开始,您可以使用this.Log(message)或外部myClass.Log(message)。这不需要公开,但这取决于图书馆的需求。

答案 2 :(得分:0)

您可以使用singleton作为记录器,并在任意位置将其称为Logger.GetInstance().Log(something)