Cela peut être quelque peu lié à Passer ILogger ou ILoggerFactory aux constructeurs dans AspNet Core ? Cependant, il s'agit ici spécifiquement de Conception de la bibliothèque et non sur la manière dont l'application qui utilise ces bibliothèques met en œuvre sa journalisation.
J'écris une bibliothèque .net Standard 2.0 qui sera installée via Nuget, et pour permettre aux personnes qui utilisent cette bibliothèque d'obtenir des informations de débogage, je fais appel à Microsoft.Extensions.Logging.Abstractions pour permettre l'injection d'un logger standardisé.
Cependant, je vois des interfaces multiples, et les exemples de code sur le web utilisent parfois la fonction ILoggerFactory
et crée un logger dans le ctor de la classe. Il y a aussi ILoggerProvider
qui ressemble à une version en lecture seule de la Factory, mais les implémentations peuvent ou non implémenter les deux interfaces, donc je devrais choisir. (L'interface Factory semble plus courante que l'interface Provider).
Certains codes que j'ai vus utilisent l'élément non générique ILogger
et peuvent même partager une instance du même enregistreur, et d'autres prennent une interface ILogger<T>
dans leur ctor et attendent du conteneur DI qu'il prenne en charge les types génériques ouverts ou l'enregistrement explicite de chaque ILogger<T>
variation que ma bibliothèque utilise.
Pour l'instant, je pense que ILogger<T>
est la bonne approche, et peut-être un ctor qui ne prend pas cet argument et passe un Logger Null à la place. De cette façon, si aucun enregistrement n'est nécessaire, aucun n'est utilisé. Cependant, certains conteneurs DI choisissent le plus grand ctor et échouent donc de toute façon.
Je suis curieux de savoir ce que je supposé afin de créer le moins de maux de tête possible pour les utilisateurs, tout en permettant un support de journalisation adéquat si nécessaire.