簡體   English   中英

在沒有引用通過的情況下記錄整個類庫

[英]Logging throughout class library without references passes

我在C#中有一個類庫,它為我做了很多不同的功能。 我希望能夠在整個類中記錄日志,但是,我真的不想在整個過程中都傳遞日志記錄庫的實例。

例如

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

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

在這個庫中,我到處都有類,並且正在努力找到一種好方法。 我一直在研究Ninject的依賴項注入,但是似乎無法理解它應該如何工作。

因此,總而言之,我希望能夠擁有一個日志記錄類,並且能夠實例化它一次,然后在任何地方使用它來進行日志記錄。

我認為不需要單身人士。 只需在您的庫中使用靜態類:

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

}

我的首選是擴展方法,該方法實現@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) 這不需要是公共的,但這取決於庫的需求。

您可以為記錄器使用一個單例 ,然后從Logger.GetInstance().Log(something)Logger.GetInstance().Log(something)一樣調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM