类实例中的静态方法-好、坏或依赖

本文关键字:依赖 实例 静态方法 | 更新日期: 2023-09-27 18:24:40

我有一个旧的保护类-它是组成的或静态的方法,典型的实用类。

然而,最近我开始使用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传递到方法中。

我的问题是基于我的经验不足——我的新类不会是静态的,但我应该让里面的方法保持静态吗?

类实例中的静态方法-好、坏或依赖

似乎根本不需要传入logger。有一个静态记录器字段(查看此答案以了解详细信息),这样它就可以在类的所有实例中共享,这是很好的,也不违反常见做法。考虑:

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);
    }
}