Mediatr + .Net 4.8 + Winforms. Da się?

0

Hejka
Potrzebuję (chyba) Mediatr w aplikacji Winforms na .Net Framework 4.8.
Aktualnie używam Microsoft.Extensions.DependencyInjection.
Pytanie czy da się użyć Mediatr z MS DependencyInjection. czy trzeba zmienić DI na coś normlanego?
Ewentualnie jaki DI najprościej współpracuje z Winforms?

Przypominam, wszystko jest na .Net Framework 4.8.

2

Powinno się dać. To jakiej biblioteki do DI używasz nie ma znaczenia. MediatR ma wsparcie zarówno dla MS-owego DI jak i Autofaca i innych. Patrzyłeś na przykładowy kod dostępny w Google? https://stackoverflow.com/questions/68144957/how-to-use-mediatr-on-winform-net-core Co prawda przykład dla .NET Core ale nie powinno to mieć w tym kontekście żadnego znaczenia tak długo jak biblioteka do DI jest wspierana na danej wersji runtime, w Twoim przypadku .NET 4.8 bo chodzi tylko o rozwiązanie zależności do IMediatr i wstrzyknięcie implementacji do głównej formatki aplikacji, zwykle Form1. Potem to już z górki.

1

Ech... Dzięki za zmuszenie do myślenia.
Mediatr 9 (dla .net 4.8) nie ma AddMediatr() i się zablokowałem.

Gdyby był tu jakiś inny archeolog

var services = new ServiceCollection();
            services.AddScoped<IListGenerator, ListGenerator>();
            services.AddSingleton<Form1>();
            services.AddSingleton<IMediator>(new Mediator((t) => { return ServiceProvider.GetService(t); }));

            services.AddScoped<IRequestHandler<GetStringsQuery, List<string>>, GetStringsQueryHandler>(); // test query handler
1

MediatR i rejestracja do kontenera to nie jest jakiś rocket science, możesz popatrzeć na GH, albo nawet zrobić forka i dostosować wersję której potrzebujesz pod .NET Framework. Z tego co pamiętam to AddMediatR jest w oddzielnej bibliotece (każdy kontener ma własną implementację, można dociągnąć albo napisać). poza tym nie wiem o co chodzi z tym fragmentem kodu, ale mediatR raczej powinien być transient.

2

To biedne gówienko od Microsftu długo nie obsługiwało otwartych generyków. Potem dodali obsługę w wersji dla dotnet core, ale o ile dobrze rozumiem, to Ty masz stary framework, więc nie wiem czy jest to wspierane czy nie.
Wiem, że długo stanowiło to problem dla MediatRa: https://jimmybogard.com/constrained-open-generics-support-merged-in-net-core-di-container/

Najprościej i tak będzie, jeśli sam sobie napiszesz command dispatcher. :)

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