Statyczny logger i DI

0

Cześć, staram się pogłębiać moją wiedzę z zakresu programowania. Piszę sobie aplikację korzystając z ASP.NET Core i próbuje stosować się do zasady Dependency Injection.

Doszedłem do momentu logowania danych w bazie. Chodzi mi o prosty logger, który jest w stanie dodać nowy wpis do tabeli logów. Pisząc po staremu napisałbym klasę statyczną, która miałaby w środku wywołanie repozytorium przez które odbywałby się zapis danych - to podejście jest wygodne bo za każdym razem nie trzeba stawiać obiektu i przejrzystość kodu się zwiększa, szczególnie że w wielu miejscach logger jest wywoływany.

Jak podejść do tego tematu używająć DI? Zamiast statycznej klasy oprzeć się o zwyczajną klasę + interfejs?

0

Zwyczajna klasa Logger, do której będzie wstrzykiwana jakaś też zwyczajna klasa LogRepository. Interfejsy możesz dorobić dopiero jak uznasz, że są potrzebne.

0

Ok, może jest to głupie pytanie, ale czy jest sens pisania kodu w ten sposób bez opierania się na interfejsach?

Wydaje mi się że byłby problem z testowaniem takiego kodu, gdybym chciał przetestować jakiś moduł który wykorzystywałby klasę Logger. Test musiałby równać się odpaleniem repozytorium i zapisie na bazie danych. W innym przypadku mogę sobie zmockować obiekt klasy Logger, lub samo Repozytorium tam gdzie byłyby akurat wykorzystywane.

2

A po co jakieś repozytorium? Wystarczy insert zrobić przez Dappera czy nawet SqlCommand.

Już więcej sensu ma interfejs do Loggera, którego produkcyjna implementacja zapisuje do bazy, a testowa np. na konsolę. Interfejs wstrzykujesz do tych klas, w których potrzebujesz logowania.

A najwięcej sensu i najwygodniej jest użyć wbudowanych mechanizmów: https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.ilogger?view=dotnet-plat-ext-3.1 i jakiejś biblioteki logującej (NLog, Serilog).

1 użytkowników online, w tym zalogowanych: 0, gości: 1