.net 5 UnitOfWork i zapętlone referejnce

.net 5 UnitOfWork i zapętlone referejnce
BL
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:68
0

Cześć,
Pisze apkę w .net 5 web api, zrobiłem sobie kilka klas ala XXXComponent, które oczywiście mają jakieś swoje metody. Żeby przez DI nie wstrzykiwać tych komponentów pojedynczo gdybym np. chciał w danej klasie skorzystać z kilku z nich zrobiłem sobie UnitOfWork, czyli klasę która ma jedynie properties i konstruktor który wstrzykuje dane klasy komponenty.
Klasy components oraz klasa UoW jest dodana jako AddTransient. Tylko teraz problem powstaje w momencie jakbym chciał w tego UoW skorzystać w innym komponencie, ponieważ wylatuje mi wyjątek o zapętlonych referencjach, co w sumie jest słuszne ponieważ ctor UoW(Component1) => Component1(UoW).
Czy jest jakiś sposób żeby to obejść? Może gdzieś w konfiguracji da się coś zmienić? Czy jedna jedyna opcja to korzystanie z takiego UoW tylko po za klasami które wchodzą w jego skład?

N0
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Gdańsk
  • Postów:647
2

Wygląda na problem XY. Jakie dokładnie serwisy zawiera UoW? Co one robią? Dlaczego zależą od siebie nawzajem? I dlaczego istnieją klasy, które potrzebują aż tylu zależności, że chcesz je wstrzykiwać przez UoW?

O ile rozumiem, to UoW to coś na kształt service locatora. Service locator obecnie jest uważany za antywzorzec. Trudno się testuje klasy, które mają wstrzyknięty service locator. Skąd w teście będziesz wiedzieć, których zależności potrzebuje klasa, którą testujesz? Tak, można wejść do testowanej klasy i sprawdzić, ale co jak zmienią się zależności? Nie dowiesz się o tym na etapie kompilacji.

Jeśli bardzo chcesz, to Autofac wspiera wstrzykiwanie przez propertiesy i tym da się rozwiązać cykliczne referencje (to jak leczenie dżumy cholerą).

edytowany 6x, ostatnio: nobody01
BL
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:68
0

Może mam złe podejście do tego UoW, chciałem sobie ułatwić prace i zamiast wstrzykiwać raz 5 komponentów, a raz 3, wstrzykiwać zawsze wszystkie i korzystać z tych których potrzebuję. Czyli co powinienem zrezygnować z UoW które np. ma w sobie wszystkie komponenty lub UoW z wszystkimi repository i wstrzykiwać do klasy tylko te klasy których będę potrzebował? nawet jeśli się okaże że będzie to 5, 10 innych klas które będą potrzebne do zbudowania jakiejś logiki biznesowej?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 24 godziny
  • Lokalizacja:Wrocław
0

Dlaczego uważasz, że to jest UoW?

BL
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:68
0

A nie jest?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 24 godziny
  • Lokalizacja:Wrocław
3

Pytam, bo UoW to wzorzec opakowujący transakcję biznesową. Z tego wątku wnioskuję, że Ty tak nazywasz jakiś super obiekt, który jak rozumiem przez pośrednictwo jakichś "komponentów" trzyma w sobie referencje do wszystkich klas w projekcie. To nie brzmi nawet trochę podobnie.

Ogólnie to aplikacje dzieli się na warstwy, klasy z jednej warstwy używają niektórych klas z innych warstw. Ty chyba nie masz warstw, a chcesz mieć wszystko wszędzie, stąd te problemy.

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 3 godziny
  • Postów:5141
1

Żeby przez DI nie wstrzykiwać tych komponentów pojedynczo gdybym np. chciał w danej klasie skorzystać z kilku z nich zrobiłem sobie

Mi to brzmi bardziej na jakąś facade / wrapper

edytowany 1x, ostatnio: WeiXiao

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.