MediatR - usunięcie powtarzalnego kodu

0

W mojej aplikacji korzystającej z MediatR większość handlerów zaczyna się od podobnego kodu:

private readonly ApplicationDbContext _db;
private readonly IAuthContext _auth;

public SomeCommandHandler(ApplicationDbContext db, IAuthContext auth)
{
    _db = db;
    _auth = auth;
}

Czy jest jakiś ładny sposób na uniknięcie pisania za każdym razem tych samych pól i konstruktora? Myślałem o napisaniu jakiegoś HandlerBase i skorzystaniu z service locator, ale przeczytałem, że to antywzorzec (testowanie tych handlerów byłoby kłopotliwe).

3

Może jakiś generyczny Handler bazowy po którym Twoje handlery będą dziedziczyły i przekazywały zależności do bazowego konstruktora? Konstruktor może je wtedy wystawiać jako właściwości protected.

0

Fajne, ale i tak dalej będzie trzeba pisać konstruktory. Ale szczerze mówiąc, wątpię, by dało się z nich zrezygnować.

1

Przykład z linku jak najbardziej ma sens, ale nie dotyczy problemu o który Ty spytałeś. No i Tych konstruktorów raczej nie unikniesz. Zawsze możesz spróbować napisać coś własnego, bazując na MediatR dla ułatwienia. Ja sam ostatnio się tym zająłem bo potrzebowałem mediatora z możliwością perzystencji stanu handlerów, ale to inna bajka. Tak czy inaczej myślę że konstruktory to mały problem.

2

To jest tak zwany małpi kod, pisanie go boli, bo małpa by go równie dobrze mogła napisać. Tyle że taki kod jest przejrzysty, czytelny i testowalny. Znacznie wyżej taki kod cenię niż próby kombinowania jak z tego githuba.

Taki kod najlepiej generować automatycznie, VS ma wbudowane Generate constructor..., deklarujemy pola wybieramy Generate constructor... i VS generuje za nas konstruktor razem w przypisaniami.

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