Castle Windsor to narzędzie do odwracania kontroli. Są tacy inni.
Może dać ci obiekty ze wstępnie zbudowanymi i okablowanymi zależnościami. Cały wykres obiektu utworzony za pomocą odbicia i konfiguracji zamiast „nowego” operatora.
Zacznij tutaj: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Wyobraź sobie, że masz zajęcia wysyłania wiadomości e-mail. EmailSender. Wyobraź sobie, że masz inną klasę WorkflowStepper. Wewnątrz WorkflowStepper musisz użyć EmailSender.
Zawsze możesz powiedzieć new EmailSender().Send(emailMessage);
ale to - użycie new
- tworzy ciasne SPRZĘGŁO, które trudno zmienić. (w końcu to mały wymyślony przykład)
Co więc, jeśli zamiast nowego tego złego chłopca w WorkflowStepper, właśnie przekazałeś go konstruktorowi?
Zatem ktokolwiek to nazwał, musiał założyć EmailSender.
new WorkflowStepper(emailSender).Step()
Wyobraź sobie, że masz setki tych małych klas, które mają tylko jedną odpowiedzialność (google SRP) .. i używasz kilku z nich w WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Wyobraź sobie, że nie martwisz się szczegółami, EmailSender
kiedy piszesz WorkflowStepper
lubAlertRegistry
Martwisz się o problem, z którym pracujesz.
Wyobraź sobie, że cały wykres (drzewo) obiektów i zależności jest łączony w czasie RUN TIME, więc kiedy to zrobisz:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
dostajesz prawdziwą ofertę na WorkflowStepper
wszystkie zależności automatycznie wypełniane tam, gdzie ich potrzebujesz.
Nie ma new
Tak się po prostu dzieje - bo wie, czego potrzebuje.
I możesz pisać mniej defektów dzięki lepiej zaprojektowanemu, DRY kodowi w testowalny i powtarzalny sposób.