.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)?
@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
@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?
@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,
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
źródło: comment_E39dYAQMjdqmXRm1x5njl03YI6msuRmO.jpg
PobierzNatomiast pytanie czemu interfejs a nie klasa – a
@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?
Czyli tak jakby AddScoped