类实例中的静态方法 - 好,坏还是依赖?

时间:2015-11-26 13:22:24

标签: c# asp.net

我有一个旧的防护类 - 它是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进入方法。

我的问题是基于我的经验不足 - 我的新课程不会是静态的,但是我应该将这些方法保留为静态吗?

1 个答案:

答案 0 :(得分:6)

您似乎根本不需要传递记录器。有一个静态记录器字段(详见this answer)以便在类的所有实例之间共享,这是很好的并且不违反常规做法。考虑:

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