[英]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.