我习惯将记录器传递给构造函数,例如:
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");
更新:正如Merlyn正确注意到的那样,我应该提到,在第一和第二个示例中,我正在使用DI。