c# - 类实例中的静态方法 - 好、坏还是取决于?

标签 c# asp.net

我有一个旧的守卫类 - 它是 constisted 或静态方法,典型的实用类。

但是,最近我开始使用 NLog - 所以我的守卫现在可以记录和抛出。 NLog 的问题是每个调用类( guard 所在的地方)都会创建自己的记录器,所以不是这样的方法:

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

现在我所有的方法都包含与记录器相关的两个相同参数,所以我几乎决定依赖注入(inject)将是一种更好的方法,将记录器传递到构造函数中,并将 obj 传递到方法中。

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

最佳答案

看起来你根本不需要传入记录器。拥有静态记录器字段(有关详细信息,请参阅 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);
    }
}

关于c# - 类实例中的静态方法 - 好、坏还是取决于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939852/

相关文章:

c# - log4net 记录所有未处理的应用程序错误

c# - 您可以在类型上而不是在类型的实例上拥有扩展方法吗?

c# - C# 中的内联/速记类型

asp.net - css类是否可以与asp :Menu control in .net 2.0一起使用

asp.net - 如何在reportviewer控件上从asp.net调用打印?

c# - 如何格式化 DateTime 中的小时以返回 0 而不是 12?

c# - ASP.NET Core 2.2 MVC : wrap responses

asp.net - 如何在iis应用程序范围内部署套接字服务器

c# - 查询字符串检查

.net - ASP.NET MVC 应用程序的 aspx 文件中的挂起代码如何执行?