Może to być nieco związane z przekazywaniem ILogger lub ILoggerFactory do konstruktorów w AspNet Core? jednak dotyczy to w szczególności projektowania bibliotek , a nie sposobu, w jaki aplikacja korzystająca z tych bibliotek implementuje swoje rejestrowanie.
Piszę bibliotekę .net Standard 2.0, która zostanie zainstalowana przez Nuget i aby umożliwić osobom używającym tej biblioteki uzyskanie pewnych informacji debugowania, polegam na Microsoft.Extensions.Logging.Abstractions, aby umożliwić wstrzyknięcie standardowego Loggera.
Jednak widzę wiele interfejsów, a przykładowy kod w Internecie czasami używa ILoggerFactory
i tworzy rejestrator w ctor klasy. Jest też ILoggerProvider
wersja Factory tylko do odczytu, ale implementacje mogą, ale nie muszą, implementować oba interfejsy, więc musiałbym wybrać. (Fabryka wydaje się bardziej powszechna niż Dostawca).
Część kodu, który widziałem, używa nieogólnego ILogger
interfejsu i może nawet współużytkować jedno wystąpienie tego samego rejestratora, a niektóre biorą ILogger<T>
swój ctor i oczekują, że kontener DI będzie obsługiwał otwarte typy ogólne lub jawną rejestrację każdej ILogger<T>
odmiany mojej biblioteki używa.
W tej chwili uważam, że ILogger<T>
jest to właściwe podejście i być może ktor, który nie przyjmuje tego argumentu i zamiast tego przekazuje Null Logger. W ten sposób, jeśli nie jest potrzebne żadne logowanie, żadne nie jest używane. Jednak niektóre kontenery DI wybierają największego ctora i tak i tak by się nie udało.
Ciekaw jestem, co ja powinienem robić, żeby stworzyć najmniejszą ilość utrapieniem dla użytkowników, a jednocześnie zapewni odpowiednie wsparcie rejestrowania w razie potrzeby.