Asp.net-Mvc
Ninject.Extensions.Logging.nlog2 - 如何?
瀏覽 nuget 庫,我遇到了Ninject.Extensions.Logging.nlog2。一些Google搜尋並試圖弄清楚事情,我似乎無法找到您將如何或為什麼要使用此擴展程序。
是否建議與 MVC 3 一起使用?
究竟有什麼意義?
你如何使用它?
這真的很簡單;NLog 和 log4net 都希望您使用單例/靜態引用來獲取記錄器實例:
private static Logger logger = LogManager.GetCurrentClassLogger();這被廣泛認為是一種反模式,但即使你對它沒有任何問題,如果你試圖實現依賴注入,它仍然是違背規律的。在 NLog 的情況下,它甚至不是log4net 之類
ILog的ILogger介面,它是一個實際的類。這具有某些缺點,例如無法創建代理、延遲載入、記憶體等。Ninject.Extensions.Logging 項目所做的是首先提供一個
ILogger帶有簡單方法的抽像類,如Info,Error等,因此您可以將其作為依賴項注入並根據需要切換日誌框架:public class WidgetProvider { private readonly ILogger log; public WidgetProvider(ILogger log) { this.log = log; } }這就是 DI 應該如何工作的——一個類永遠不會去獲取它自己的依賴項,而是由上面的建構子或呼叫者提供。假設您已經將 Ninject 本身集成到您的項目中,這就是您真正需要做的一切,沒有額外的工作。
至於 Ninject.Extensions.Logging.NLog2具體做了什麼——它只是提供了一個基於 NLog2 的 Ninject.Extensions.Logging 實現。基本 Logging 庫實際上不包含任何實現
ILogger,您必須插入特定庫之一(NLog、NLog2 或 log4net)才能使其工作。如果您切換 DI 庫的頻率比切換記錄器的頻率高,那麼請不要理會它。但是,如果您像我一樣在幾乎每個項目中都使用 Ninject,那麼這是將您的程式碼與任何特定日誌庫分離的好方法。