我将使用反射在运行时将一些类加载到我的程序中。我希望这些类能够使用与主程序相同的日志记录类。
提前考虑,我该如何处理?会使用静态类吗?
我宁愿不使用日志框架,因为它对我想要的东西来说太过分了。
感谢。
答案 0 :(得分:2)
如果你真的不想使用日志框架(这是可以理解的),那么你可能想看一下Singleton模式。
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
请注意,只能从.Instance
属性创建/访问/访问此类,该属性共享相同的实例。
答案 1 :(得分:0)
看看log4net。这将处理你想要的所有事情。如果你需要在特殊地方登录,请实现自己的appender。其他日志框架将提供您需要的功能。无需重新发明日志。
答案 2 :(得分:0)
如果你想使用单身注意事项,那么在C#中它可以用更简洁的方式实现:
public class Singletone
{
public static readonly Singletone Instance = new Singletone();
private Singletone() {}
// other methods
public void DoTheJob(){}
}
// usage
Singletone.Instance.DoTheJob();
此实现解决了延迟初始化(仅在应用程序域中第一次使用类时执行字段初始化程序)以及线程安全(静态初始化程序在.NET中保证为线程安全)等问题。
答案 3 :(得分:0)
您可以使用名为ILogger的公共接口包装记录器实现 - 您将加载的所有类将接受其构造函数中的接口 - 您可以在创建它们时将记录器实现注入其中。 另外 - 关于运行时的加载 - 你听说过MEF吗? http://msdn.microsoft.com/en-us/library/dd460648.aspx - 在这方面它可能对您有所帮助,并会自动将记录器依赖项注入您加载的新类中
我不认为类引用的单例记录器是好的,因为它会将记录器从您的代码库紧密耦合到您创建的类。构造函数中的注入和接口会将它们与记录器松散地耦合,并使它们更加独立。可测试的。