在没有引用的情况下记录整个类库
本文关键字:记录 类库 情况下 引用 | 更新日期: 2023-09-27 18:13:44
我有一个c#类库,它为我做了很多不同的功能。我希望能够在整个类中记录日志,但是,我真的不希望必须在整个类中传递日志库的实例。
。
public void MyMethod(LoggingClass logger)
{
logger.log("something");
}
public void MyMehtod2(LoggingClass logger)
{
logger.log("something else");
}
我在这个库中到处都有类,我正在努力寻找一个好方法来做到这一点。我一直在研究Ninject的依赖注入,但似乎无法理解它应该如何工作。
所以总结一下,我希望能够有一个日志记录类,并且能够实例化它一次,然后在任何地方使用它进行日志记录。
我认为没有必要使用单例。只需在库中使用一个静态类:
internal static class Logger {
static Logger() {
// configure logger
}
internal static void Log(string Message, params object[] args) {
var message = string.Format(Message, args);
// write message
}
我的首选是实现@IAbstract中提到的一些静态类的扩展方法。如果你的类都实现了你自己的ILog接口,你可以这样做:
public static void Log(this ILog source, string message)
{
source.Log(message, null);
}
public static void Log(this ILog source, string message, param object[] args)
{
// Assuming a static class as mentioned by @IAbstract
Logger.Log(message, args);
}
然后在你的类或从任何地方取决于保护水平,你可以使用this.Log(message)
或外部myClass.Log(message)
。这并不需要是公共的,但这将取决于库的需要。
您可以为您的记录器使用单例,并在您喜欢的任何地方调用它,如Logger.GetInstance().Log(something)