Це може бути дещо пов’язане з передачею ILogger або ILoggerFactory конструкторам в AspNet Core? однак це стосується конкретного дизайну бібліотеки , а не про те, як реальна програма, яка використовує ці бібліотеки, реалізує свій журнал.
Я пишу бібліотеку .net Standard 2.0, яка буде встановлена через Nuget, і щоб люди, які використовують цю бібліотеку, отримували інформацію про налагодження, я залежу від Microsoft.Extensions.Logging.Abstractions, щоб дозволити ін'єкцію стандартизованого журналу.
Однак я бачу декілька інтерфейсів, а зразок коду в Інтернеті іноді використовує ILoggerFactory
та створює реєстратор у ctor класу. Існує також ILoggerProvider
схожа на версія для Фабрики лише для читання, але реалізація може або не може реалізувати обидва інтерфейси, тому мені доведеться вибрати. (Фабрика здається більш поширеною, ніж постачальник).
Якийсь код, який я бачив, використовує негенеричний ILogger
інтерфейс і може навіть ділити один екземпляр того ж реєстратора, а деякі беруть ILogger<T>
свій ctor і очікують, що контейнер DI підтримує відкриті загальні типи або явну реєстрацію кожної ILogger<T>
модифікації моєї бібліотеки використовує.
Зараз я думаю, що ILogger<T>
це правильний підхід, і, можливо, ctor, який не бере цього аргументу, а просто передає Null Logger замість цього. Таким чином, якщо реєстрація не потрібна, жодна з них не використовується. Однак деякі контейнери DI вибирають найбільший ctor і, таким чином, все-таки вийдуть з ладу.
Мені цікаво , що я повинен бути тут робите , щоб створити найменшу кількість головного болю для користувачів, в той же час дозволяючи належну підтримку протоколювання при бажанні.