Wpis z mikrobloga

.net core
Zagłębiłem się w temat ioC i DI, i jak to przebiega z pomoca AddScoped,AddTransiet itp
Tak naprawde jaki jest cel przekazywania np IEventRepository, w sensie interfejsu z samym szkieletem do EventService, i przypisanie go do private static readonly IEventRepository _movie -> i nastepnie wykonywanie wszystkich operacji z tego pola,
Rozumiem ze ulatwia to testy, i ogranicza dostep bo działamy na obiekcie readonly, ale jakos tego nie roumiem chyba

services.AddScoped();

a sama ta metoda działa tak ze wstrzykuje ten sam obiekt EventService do konstuktorów (w tym przypadku)?

#programowanie
Koprowy - .net core
Zagłębiłem się w temat ioC i DI, i jak to przebiega z pomoca Add...

źródło: comment_E39dYAQMjdqmXRm1x5njl03YI6msuRmO.jpg

Pobierz
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Koprowy: DI polega na tym, że masz pulę komponentów i framework skleja je do kupy, zazwyczaj przez przekazywanie ich wzajemnie do konstruktorów. Dzięki temu komponenty nie muszą się przejmować znajdywaniem tego, co potrzebują. W Twoim przypadku EventService potrzebuje IEventRepository i nie ważne, skąd je dostanie – czy to będzie implementacja z puli, czy jakiś mock ręcznie wstawiony na potrzeby testów itd.
Natomiast pytanie czemu interfejs a nie klasa – a
  • Odpowiedz
services.AddScoped();


@Koprowy: @vytah: nie rozumiem czemu we frameworkach DI w C# tak ułomnie się to odbywa. W Springu np. komponent oznaczany jest @Component czy tam @Service czy tam ręcznie tworzony @Bean i jest z automatu dostępny do wstrzykiwania. Nigdzie nie trzeba tego ręcznie rejestrować, no bo i po co?

  • Odpowiedz
@vytah: to cos wspomnialeś to framework IOC. DI w swojej genezie to sposów projektowania klas w taki sposób, żeby zależności były przekazywane do instacji z zewnątrz a nie tworzone w środku. Przykładowo projekt, który tworzy graf wszystkich zależności całego programu w metodzie main to doskonały przykład DI, który nie wykorzystuje żadnego frameworka IOC.

private static readonly IEventRepository _movie -> i nastepnie wykonywanie wszystkich operacji z tego pola,

Rozumiem ze ulatwia to
  • Odpowiedz