Tôi nghĩ câu trả lời cho câu hỏi này thật đáng ghét đến nỗi không ai có bận tâm về vấn đề này, nhưng muộn rồi và tôi thực sự không thể xoay sở được điều này.Cách sử dụng Thùng chứa IoC; Cụ thể là Windsor
Tôi đã đọc vào các thùng chứa IoC (Windsor trong trường hợp này) và tôi đang thiếu cách bạn nói chuyện với vùng chứa từ các phần khác nhau của mã của bạn.
Tôi nhận được DI, tôi đã làm những người nghèo DI (các nhà thầu trống gọi các nhà thầu phun quá tải với các triển khai tham số mặc định) trong một thời gian và tôi hoàn toàn có thể thấy lợi ích của container. Tuy nhiên, Im thiếu một phần quan trọng của thông tin; làm thế nào bạn có nghĩa vụ phải tham khảo các container mỗi khi bạn cần một dịch vụ từ nó?
Tôi có tạo ra một tài liệu toàn cầu duy nhất mà tôi vượt qua không? Chắc chắn là không!
Tôi biết tôi nên gọi đây là:
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
(ví dụ) khi tôi muốn tải cấu hình XML của tôi, nhưng sau đó tôi phải làm gì với container? Không tạo ra một container mới mỗi lần sau đó vẫn duy trì cấu hình được tải thông qua một số chuyên ngành tĩnh nội bộ hoặc cách khác, hoặc tôi phải tải lại cấu hình mỗi lần (tôi đoán không, hoặc vòng đời không thể làm việc).
Không hiểu điều này là ngăn chặn tôi từ làm việc hiểu cách thức vòng đời làm việc, và nhận được trên với việc sử dụng một số IoC awsomeness
Cảm ơn,
Andrew
Thực ra, rất nhiều môi trường có một lớp "root toàn cầu" ở đâu đó, nếu bạn tìm nó. Silverlight và WPF có lớp ứng dụng (code-behind cho App.xaml), đây là nơi tốt để neo một container IOC. Đối với WPF và Silverlight lớn hơn, bạn chắc chắn muốn xem Prism, cung cấp cả hai công cụ cấu trúc quy mô lớn và Unity, đó là container IOC của MS. –
@Cylon: và ASP.NET có Application_Start(), nhưng điều đó không có nghĩa là nó sẽ cho phép bạn chặn việc tạo đối tượng. Nó chỉ có nghĩa là bạn có một nơi để thiết lập các container. –
Tạo trang ASP.NET WebForms có thể bị chặn và Pages bằng cách 'xây dựng' cho DI bằng cách tạo PageHandlerFactory và đăng ký triển khai trong web.config. Xem http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=81#comm –