Castle Windsor adalah inversi alat kontrol. Ada yang lain seperti itu.
Ini dapat memberi Anda objek dengan dependensi pra-dibangun dan pra-kabel di sana. Seluruh grafik objek dibuat melalui refleksi dan konfigurasi daripada operator "baru".
Mulai di sini: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Bayangkan Anda memiliki kelas pengiriman email. Pengirim Email. Bayangkan Anda memiliki WorkflowStepper kelas lain. Di dalam WorkflowStepper Anda perlu menggunakan EmailSender.
Anda selalu bisa mengatakannya new EmailSender().Send(emailMessage);
tapi itu - penggunaan new
- menciptakan COUPLING KETAT yang sulit diubah. (Bagaimanapun, ini adalah contoh kecil yang dibuat-buat)
Jadi bagaimana jika, alih-alih membetulkan bocah nakal ini di dalam WorkflowStepper, Anda hanya meneruskannya ke konstruktor?
Jadi, siapa pun yang memanggilnya harus membuat EmailSender baru.
new WorkflowStepper(emailSender).Step()
Bayangkan Anda memiliki ratusan kelas kecil ini yang hanya memiliki satu tanggung jawab (google SRP) .. dan Anda menggunakannya di WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Bayangkan tidak khawatir tentang detail EmailSender
saat Anda menulis WorkflowStepper
atauAlertRegistry
Anda hanya khawatir tentang kekhawatiran yang sedang Anda tangani.
Bayangkan seluruh grafik (pohon) objek dan dependensi ini ditransfer pada RUN TIME, sehingga ketika Anda melakukan ini:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
Anda mendapatkan real deal WorkflowStepper
dengan semua dependensi yang secara otomatis terisi di mana Anda membutuhkannya.
Tidak ada new
Itu terjadi begitu saja - karena ia tahu apa yang perlu apa.
Dan Anda dapat menulis lebih sedikit cacat dengan kode KERING yang dirancang lebih baik dengan cara yang dapat diuji dan diulang.