我正在编写一个静态类,用于在我开发的解决方案中使用日志记录。有几个组件将使用它,如控制台应用程序,ASP.NET应用程序等......
要使日志工作,它需要先进行一些初始启动配置才能使用,并在每个应用程序完成时进行一些清理。
有没有办法在.NET中执行此操作而无需从解决方案中的每个应用程序中显式调用StartLog()和FinishLog()方法?或者也许是另一种完全看待这种情况的方式?
我一直在考虑在每个Log()方法中使用锁来检查日志记录类是否已经初始化,但是性能和复杂性方面的潜在开销让我感到害怕。
答案 0 :(得分:3)
您可以使用类型初始化程序(例如静态构造函数)作为事物的启动方 - 当您第一次使用该类时,它将自动被调用。
检测关机比较困难......有AppDomain.ProcessExit
和AppDomain.DomainUnload
哪些可能足够你...只需订阅事件并做出相应的反应。
答案 1 :(得分:2)
阅读单身人士,Jon Skeet有great article。使用此方法,您可以确保仅构造一次类型。当他谈到锁的性能时,看看最后。只是一些值得思考的东西。
答案 2 :(得分:1)
Singleton模式可能最适合您。静态_instance变量在start中初始化,因此调用其Log()构造函数,您可以在此处进行初始化。当它实现IDisposable并覆盖Finalize时,它将具有Dispose()方法,该方法将在应用程序退出并处理静态实例变量时被调用。
public class Log : IDisposable {
private Log() {
// Initialize logic
}
public LogMessage(string wah) {
// Write
}
public void Dispose() {
// Clean up
}
public override void Finalize() {
Dispose();
}
private static Log _instance = new Log();
public static Log Instance { get { return _instance; } }
// You can also implement helper methods on static level if you want to keep the usage same.
public static Message(string wah) {
_instance.LogMessage(wah);
}
}
答案 3 :(得分:0)
一个单例模式,你不是每次都重新实例化Log类,而是使用getInstance()方法可以工作