Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
18
rozdział1PodstawyWstrzykiwaniazależności:co,jakidlaczego
Listing1.1.KlasaSalutationobejmującagłównąlogikęaplikacji
publicclassSalutation
{
privatereadonlyIMessageWriterwriter;
ZapewniaklasieSalutation
zależnośćIMessageWriter
przyużyciuwstrzykiwania
publicSalutation(IMessageWriterwriter)
konstruktorem
{
if(writer==null)
thrownewArgumentNullException("writer");
ZapisWyrażeniaStrażnika
weryfikuje,czyprzesyłany
IMessageWriterniejest
this.writer=writer;
wartościąnull.e
}
publicvoidExclaim()
{
this.writer.Write("HelloDI!");
}
}
Wysyławiadomość
Hello
IMessageWriter
di
!
dozależności
Klasa
Salutation
zależyodwłasnegointerfejsunazwanego
IMessageWriter
(zdefiniowanegopóźniej).Wymagaonaprzekazaniajegoinstancjiprzezkonstruktor.
Takatechnikanazywanajest
WSTRZYKIWANIEMKONSTRUKTOREM
.WyrażenieStrażnikawery-
fikuje,czydostarczonyIMessageWriterniejestrównywartościnullprzezrzucenie
wyjątku,gdybybył8.IwkońcuklasaSalutationwykorzystujewcześniejwstrzykniętą
instancję
IMessageWriter
wewnątrzimplementacjimetody
Exclaim
przezwywoła-
niejejmetodyWrite.WtensposóbwysyłanajestwiadomośćHelloDI!doZALEŻNOŚCI
IMessageWriter.
DEFINICJA
WSTRZYKIWANIEKONSTRUKTOREM
jestdziałaniem,którestatyczniedefiniuje
listęwymaganych
ZALEŻNOŚCI
przezsprecyzowanieichjakoparametrydlakonstruk-
toraklasy.(
WSTRZYKIWANIEKONSTRUKTOREM
jestopisaneszczegółowowrozdziale4,
któryrównieżzawierabardziejszczegółowąanalizępodobnegoprzykładukodu.)
Używającterminologii
DI
,mówimy,że
ZALEŻNOŚĆ
IMessageWriter
jestwstrzykiwana
doklasy
Salutation
przyużyciuargumentukonstruktora.Uwaga,
Salutation
niewie
nicoistnieniu
ConsoleMessageWriter
.Współpracujeonazniątylkoiwyłącznieprzez
interfejs
IMessageWriter
.Toprostyinterfejsnapotrzebyprzykładu:
publicinterfaceIMessageWriter
{
voidWrite(stringmessage);
}
8
M.Fowleretal.,Refactoring:ImprovingtheDesignofExistingCode,Addison–Wesley,1999,250.Polskie
tłumaczenie:Refaktoryzacja.Ulepszaniestrukturyistniejącegokodu,Helion,2011.