簡體   English   中英

類實例中的靜態方法 - 好,壞還是依賴?

[英]Static methods inside class instance - good, bad or depends?

我有一個舊的防護類 - 它是const或靜態方法,典型的是一個實用類。

然而,最近我開始使用NLog - 所以我的守衛現在可以記錄和投擲。 NLog的問題是每個調用類(守衛所在的位置)都會創建自己的記錄器,因此不是這樣的方法:

public static void NotNull<T>(T obj, string param)
{
    if (obj.Equals(null))
        throw new ArgumentNullException(param);
}

我有一個像這樣的簽名的方法:

public static void NotNull<T>(T obj, string param, Logger logger, LogLevel logLevel)
{
}

現在我的所有方法都包含與記錄器相關的兩個相同參數,所以我幾乎決定依賴注入是一種更好的方法,將記錄器傳遞給構造函數,然后obj進入方法。

我的問題是基於我的經驗不足 - 我的新課程不會是靜態的,但是我應該將這些方法保留為靜態嗎?

看起來你根本不需要傳遞記錄器。 有一個靜態記錄器字段(請參閱此答案以獲取詳細信息),這是很好的並且不違反常規做法,因此它在類的所有實例中共享。 考慮:

public static class Utils
{
    private static readonly ILog Log = LogManager.GetLogger(typeof(Utils));

    public static void NotNull<T>(T obj, string param)
    {
        Log.Debug("Huston, we got a null.");
        if (obj.Equals(null))
            throw new ArgumentNullException(param);
    }
}

暫無
暫無

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

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