Мне было интересно, какие из лучших практик были связаны с каротажами и протоколированием фреймворков и инъекциями зависимостей. В частности, если я разрабатываю класс, который нуждается в способе регистрации, как мне нужно получить интерфейс для входа в журнал, чтобы сохранить инъекцию зависимостей?
Инъекция зависимостей, как представляется, указывает, что внешние зависимости должны быть введены извне (конструкторы или конструкторы свойств), поэтому следует взять экземпляр ILog в конструкторе и использовать его в классе? Должен ли я рассмотреть возможность регистрации дополнительной зависимости и получить ее в сеттер? Я нажимаю на слишком большую гибкость, позволяя изменить интерфейс ведения журнала, и должен ли я просто зависеть от конкретного интерфейса ведения журнала (например, создать статическую переменную ILog посредством вызова метода factory)? Может ли этот метод factory вызывать в контейнер, чтобы получить реализацию ILog, или это создаст конфликты инициализации инициализации статических переменных и инициализируется контейнер IoC?
Должен ли я делать это:
public class MyService : ISomeService
{
private static readonly ILogger s_log =
LoggingFactory.GetLogger(typeof(MyService))
...
}
или, возможно, это:
public class MyService : ISomeService
{
protected virtual ILogger Logger {get; private set;}
public MyService(ILogger logger, [other dependencies])
{
Logger = logger;
}
}
или даже это:
public class MyService : ISomeService
{
public virtual ILogger Logger {get; set;}
public MyService()
{
}
}
Другие шаблоны или способы сделать это? Что там делают люди? Что работает и когда?