У меня была привычка передавать 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.