我有一个旧的守卫类 - 它是 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/