Castle Windsor, kontrol aracının tersidir. Bunun gibi başkaları da var.
Önceden oluşturulmuş ve önceden bağlanmış bağımlılıkları olan nesneleri size orada verebilir. "Yeni" operatör yerine yansıma ve yapılandırma yoluyla oluşturulan tüm nesne grafiği.
Buradan başlayın: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Bir e-posta gönderme sınıfınız olduğunu düşünün. EmailSender. Başka bir WorkflowStepper sınıfınız olduğunu düşünün. WorkflowStepper içinde EmailSender kullanmanız gerekir.
Her zaman söyleyebilirdin new EmailSender().Send(emailMessage);
ancak bu - kullanımı new
- değiştirilmesi zor olan sıkı bir bağlantı oluşturur. (bu her şeyden önce ufak tefek bir örnek)
Peki ya bu kötü çocuğu WorkflowStepper içinde yenmek yerine, onu yapıcıya geçtiyseniz?
O zaman onu kim çağırsa EmailSender'ı yenilemek zorunda kaldı.
new WorkflowStepper(emailSender).Step()
Yalnızca bir sorumluluğu (google SRP) olan yüzlerce sınıfınız olduğunu ve WorkflowStepper'da bunlardan birkaçını kullandığınızı düşünün:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Ayrıntıları endişesi değil düşünün EmailSender
siz yazarken WorkflowStepper
veyaAlertRegistry
Sadece üzerinde çalıştığınız endişeden endişe ediyorsunuz.
Nesnelerin ve bağımlılıkların tüm grafiğinin (ağaç) ÇALIŞMA SÜRESİ'nde kablolandığını düşünün, böylece bunu yaptığınızda:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
WorkflowStepper
İhtiyacınız olan yerde otomatik olarak doldurulan tüm bağımlılıklar ile gerçek bir anlaşma elde edersiniz .
Yok new
Sadece olur - çünkü neyin neye ihtiyacı olduğunu bilir.
Ve daha iyi tasarlanmış DRY kodu ile test edilebilir ve tekrarlanabilir bir şekilde daha az hata yazabilirsiniz.