.net - 单例、日志记录和全局设置 - 好还是坏的实现?

标签 .net singleton scope settings global

我有一个日志类,需要从应用程序中的几乎所有地方调用。

但是,它需要在应用程序的开头设置“要写入的路径”、“日志级别”以及是否“启用”。

我不想每次都给这个参数或将 Logging 类作为参数传递给我的应用程序中的每个对象,所以我确实使用单例模式进行日志记录。

最近我从紧密耦合的类中遭受了很多痛苦,我不想再犯同样的错误,但考虑到这听起来像是唯一的好解决方案。

更新:

我并不真正关心记录我关心的是解决类似的设计问题 ,我与另一个需要从这么多类中使用的全局设置对象有同样的困境。但是将它注入(inject)到它们中的每一个只会产生可怕的开销和可读性较差的代码。

你如何看待这个实现,当你遇到类似的设计决策时你会怎么做?

附言请不要建议“使用 Log4X 库”等。

最佳答案

首先 - 你能把日志写入器写成跟踪监听器,并使用 Trace.Write等从方法?

你真的需要一个实例吗?这将很有用,例如,如果您想将其抽象为 TextWriter或类似的 - 但如果它是一个独立的单例,方法可以不直接使用静态方法,即 Log.Write(...) (而不是传入一个日志实例)?

关于一般问题 - 它取决于正在执行日志记录的类型。对于“管理器”(等)类,您可以考虑使用依赖注入(inject)(Unity、StructureMap 等)来自动执行此操作。不过,我通常不会将注入(inject)与 DTO 一起使用。

关于.net - 单例、日志记录和全局设置 - 好还是坏的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796585/

相关文章:

c# - 如何建立/模拟持久的 TCP 连接?

.net - 如何在 ViewBag 中传递变量列表

c# - DLL 中的单例类可以跨进程共享吗?

javascript - Angular 如何以正确的方式从服务设置范围变量?

C 操作顺序

c# - .NET 4.5 中的垃圾收集是否有变化

.net - WPF ColumnDefinition 自动宽度 MinWidth 绑定(bind)

javascript - 使用 RequireJS,我如何传递全局对象或单例?

java - 单例设计模式示例请

http - Runscope Traffic Inspector 的替代品