我在C#中有一个类库,它为我做了很多不同的功能。我希望能够在整个类中进行日志记录,但是,我真的不想在整个过程中传递日志记录库的实例。
e.g。
public void MyMethod(LoggingClass logger)
{
logger.log("something");
}
public void MyMehtod2(LoggingClass logger)
{
logger.log("something else");
}
我在这个图书馆的每个地方都有课程,我正在努力做好这个。我一直在寻找与Ninject的依赖注入,但似乎无法理解它应该如何工作。
总而言之,我希望能够拥有一个日志记录类,并且能够实例化一次,然后在任何地方使用它来记录。
答案 0 :(得分:5)
我认为不需要单身人士。只需在库中使用静态类:
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
}
答案 1 :(得分:1)
我的偏好是实现@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)
。这不需要公开,但这取决于图书馆的需求。
答案 2 :(得分:0)
您可以使用singleton作为记录器,并在任意位置将其称为Logger.GetInstance().Log(something)
。