Я использую Autofac в качестве своего IoC, и из всего, что я читал по теме, DI учит использовать "инъекцию конструктора", чтобы явно выявлять зависимости классов... Тем не менее, я также использую logging facade (Common.Logging) с Log4Net и создал модуль Autofac для его ввода. Теперь, в каждом классе, в котором я хочу выполнить некоторую запись, у меня есть дополнительный параметр конструктора (см. Образец №1)....
Мне интересно, нужно ли регистрировать DI при использовании фасада лесозаготовки? Я понимаю, что явно выявление зависимостей через подпись конструктора является хорошей архитектурой. но в случае каротажного фасада я верю в следующее:
- Я могу по-прежнему "менять" структуру ведения журнала в любое время
- Класс IMHO на самом деле не зависит от Logger. Если протокол не настроен, используется NullLogger. Это почти "это, если вам это нужно", и "это не сработает, если вы не предложите его" (см. Образец № 2).
Итак, что думают другие? Является ли инъекционный каротаж фасад излишним? Есть несколько похожих вопросов по этой теме, но в более общих терминах (инфраструктура) - меня в основном интересуют вход....
// IoC "way"
public class MyController : BaseController
{
private readonly ILog _logger;
public MyController(ILog logger)
{
_logger = logger;
}
public IList<Customers> Get()
{
_logger.Debug("I am injected via constructor using some IoC!");
}
}
// just use the logger "way"
public class MyController : BaseController
{
private static readonly ILog Logger = LogManager.GetCurrentClassLogger();
public IList<Customers> Get()
{
Logger.Debug("Done! I can use it!");
}
}