Castle Windsor là một công cụ điều khiển đảo ngược. Có những người khác thích nó.
Nó có thể cung cấp cho bạn các đối tượng với các phụ thuộc được xây dựng sẵn và có sẵn ngay trong đó. Toàn bộ biểu đồ đối tượng được tạo thông qua sự phản chiếu và cấu hình thay vì toán tử "mới".
Bắt đầu tại đây: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Hãy tưởng tượng bạn có một lớp gửi email. Người gửi email. Hãy tưởng tượng bạn có một lớp WorkflowStepper khác. Bên trong WorkflowStepper bạn cần sử dụng EmailSender.
Bạn luôn có thể nói new EmailSender().Send(emailMessage);
nhưng điều đó - việc sử dụng new
- tạo ra một TIGHT COUPLING khó thay đổi. (đây là một ví dụ nhỏ
Vậy điều gì sẽ xảy ra nếu, thay vì làm mới cậu bé hư hỏng này trong WorkflowStepper, bạn chỉ cần chuyển nó vào hàm tạo?
Vì vậy, bất cứ ai gọi nó đều phải đăng ký EmailSender.
new WorkflowStepper(emailSender).Step()
Hãy tưởng tượng bạn có hàng trăm lớp nhỏ này chỉ có một trách nhiệm (google SRP) .. và bạn sử dụng một vài trong số chúng trong WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Hãy tưởng tượng không lo lắng về các chi tiết EmailSender
khi bạn đang viết WorkflowStepper
hoặcAlertRegistry
Bạn chỉ lo lắng về mối quan tâm bạn đang làm việc.
Tưởng tượng toàn bộ biểu đồ (cây) của các đối tượng và phụ thuộc này được nối dây vào RUN TIME, để khi bạn thực hiện việc này:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
bạn có được một thỏa thuận thực sự WorkflowStepper
với tất cả các phụ thuộc được điền tự động vào nơi bạn cần chúng.
Không có new
Nó chỉ xảy ra - bởi vì nó biết những gì cần những gì.
Và bạn có thể viết ít lỗi hơn với mã DRY được thiết kế tốt hơn theo cách có thể kiểm tra và lặp lại.