Castle Windsor è un'inversione di strumento di controllo. Ce ne sono altri simili.
Può darti oggetti con dipendenze precostruite e precablate proprio lì. Un intero oggetto grafico creato tramite la riflessione e la configurazione anziché il "nuovo" operatore.
Inizia qui: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Immagina di avere un corso di invio di email. EmailSender. Immagina di avere un'altra classe WorkflowStepper. All'interno di WorkflowStepper devi usare EmailSender.
Potresti sempre dire new EmailSender().Send(emailMessage);
ma questo - l'uso di new
- crea un GIUNTO ATTIVO che è difficile da cambiare. (questo è un piccolo esempio inventato dopo tutto)
E se, invece di rinnovare questo cattivo ragazzo all'interno di WorkflowStepper, lo avessi appena passato al costruttore?
Quindi, chiunque lo chiamasse doveva rinnovare EmailSender.
new WorkflowStepper(emailSender).Step()
Immagina di avere centinaia di queste piccole classi che hanno solo una responsabilità (google SRP) .. e ne usi alcune in WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Immagina di non preoccuparti dei dettagli di EmailSender
quando stai scrivendo WorkflowStepper
oAlertRegistry
Ti preoccupi solo della preoccupazione con cui stai lavorando.
Immagina che l'intero grafico (albero) di oggetti e dipendenze venga cablato a RUN TIME, in modo che quando lo fai:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
ottieni un vero affare WorkflowStepper
con tutte le dipendenze compilate automaticamente dove ti servono.
Non c'è new
Succede e basta , perché sa cosa ha bisogno di cosa.
E puoi scrivere meno difetti con un codice DRY meglio progettato in un modo testabile e ripetibile.