gpt4 book ai didi

c# - 静态工厂 - 好的做法?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:40 25 4
gpt4 key购买 nike

我有一个静态日志管理器类,它应该根据参数返回所需记录器的实例。

public static class LogManager {

private static ILoggerFactory Factory { ... }

public static ILogger GetLogger(string name) {
return Factory.Create(name);
}

}

由于必须设置(初始化)ILoggerFactory 的具体实现,我想知道我是否应该只保留对实现类型的引用并在每次请求工厂时返回一个新实例 - 或者是否可以保留实现实例的静态引用。

版本 1

private static Type _factoryType;

public static void SetFactory<TFactory>()
where TFactory : ILoggerFactory, new()
{
_factoryType = typeof(TFactory);
}

private static Factory {
get { return (ILoggerFactory)Activator.CreateInstance(_factoryType);
}

public static ILogger GetLogger(string name) {
return Factory.Create(name);
}

版本 2

private static ILoggerFactory _loggerFactory;

public static void SetFactory<TFactory>()
where TFactory : ILoggerFactory, new()
{
_loggerFactory = (ILoggerFactory)Activator.CreateInstance<TFactory();
}

public static ILogger GetLogger(string name) {
return _loggerFactory.Create(name);
}

最佳答案

可以说,主要区别似乎在于延迟加载:v1 将在调用 GetLogger 时创建记录器类型,而 v2 将在 SetFactory 期间创建记录器。否则没有太大区别。可以将对记录器类型或工厂本身的引用作为私有(private)静态字段保留。

但是,如果这是生产代码,我会完全摆脱这个日志管理器和工厂。相反,我会使用日志记录框架,例如 nlog 或 log4net 直接。这简化了代码并使其更易于维护。在这种情况下构建抽象是过度工程。

关于c# - 静态工厂 - 好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25121335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com