Wpis z mikrobloga

Jak w logiczny sposób można wytłumaczyć wstrzykiwanie zależności (dependency injection)?

Czytałem o tym na kilku stronach i nadal niezbyt rozumiem różnicę między wstrzykiwaniem, a tworzeniem obiektu podczas wywoływania funkcji:

private void temp(wlasnyTyp nazwaElementu){ }
W Angularze jest to używane:

export class NowaKlasa{
contructor(private nazwaElementu: wlasnyTyp) {}
}

#programowanie #angular #csharp
  • 54
@teddybear69: nie odpowiadasz na pytania. Odmóżdżające rozmowy też są potrzebne, przynajmniej nauczę się w końcu jak obchodzić się z takimi ludźmi jak ty jak kiedyś trafię na nich w pracy.
Może akurat wymyśliłeś coś ciekawego, co by oświeciło całą branżę i mógłbym zostać pierwszym który głosi dobrą nowinę :) ale chyba nic z tego
DI ma tę zaletę, że umożliwia pisanie kodu pod przyszłe zmiany. Jeśli mamy projekt na zaliczenie to używanie DI to przesada, ale jak wiemy że klient jest kapryśny i zmian jest dużo, często i gęsto, to DI ma jak najbardziej sens.
@GrabkaMan: nie ma żadnej różnicy.
Nikt nie powiedział, że to musi być przez konstruktor.
W DI chodzi o to, żeby wydzielić jakąś funkcjonalność do innej klasy i dostarczać instancję tej klasy z zewnątrz czy to przez konstruktor, metodę, property czy w dowolny inny sposób. Chodzi o to żeby wewnątrz klasy A nie tworzyć instancji klasy B tylko ją właśnie "wstrzyknąć", wtedy mamy loose coupling i cały myk w zasadzie polega na
@GrabkaMan : znaczy tak oba to DI, ale różnica w sumie jest. Wstrzyknięcie przez konstruktor można łatwiej zautomatyzować tzn. możesz poprosić o instancję klasy A, która przyjmuje w konstruktorze klasę B i C, to możesz poprosić kontener DI o klasę A i on automatycznie utworzy obiekt klasy B i C i użyje ich do utworzenie obiektu klasy A, natomiast jak przekazujesz przez metodę to "ręcznie" zależności musisz przekazać.
via Wykop Mobilny (Android)
  • 0
@snejdan: czyli działa tak samo, ale przy wstrzykiwaniu kilku klas nie trzeba pamiętać o kolejnych zależnościach w klasach. Mówię tu o przypadku gdy do A wstrzymuje B, a B ma wstrzyknięte C. Więc automatycznie A posiada B i C?