Является ли хорошей практикой иметь логгер как синглтон?

У меня была привычка передавать logger в конструктор, например:

public class OrderService : IOrderService {
     public OrderService(ILogger logger) {
     }
}

Но это довольно раздражает, так что я использовал это свойство некоторое время:

private ILogger logger = NullLogger.Instance;
public ILogger Logger
{
    get { return logger; }
    set { logger = value; }
}

Это тоже начинает раздражать - оно не сухое, мне нужно повторять это в каждом классе. Я мог бы использовать базовый класс, но опять же - я использую класс Form, поэтому мне понадобится FormBase и т.д. Вот я и думаю, что будет за недостаток иметь синглтон с открытым ILogger, чтобы никто не знал, где взять логгер:

    Infrastructure.Logger.Info("blabla");

UPDATE: Как правильно заметил Merlyn, я должен упомянуть, что в первом и втором примерах я использую DI.

75
задан Giedrius 13 December 2011 в 08:09
поделиться