2009-03-23 23 views
7

Tôi có một lớp mà tôi muốn có quyền truy cập vào thùng chứa IOC của tôi (Windsor), tuy nhiên tôi không muốn giữ một thuộc tính tĩnh IWindsorContainer treo xung quanh - Tôi muốn có vùng chứa tiêm chính nó vào bất kỳ lớp nào yêu cầu IWindsorContainer như một phụ thuộc hàm tạo.IWindsorContainer như một tham số cho một lớp

Tôi đã tắt tính năng này với Unity, nhưng khi tôi thử cùng một thứ với thùng chứa Windsor, nó cho tôi biết rằng IWindsorContainer không được đăng ký với vùng chứa.

Tôi không nghĩ rằng mình chỉ có thể đăng ký IWindsorContainer => WindsorContainer, vì điều đó sẽ khiến thùng chứa tạo một phiên bản mới (hoặc khác) của chính nó để chuyển đến lớp của tôi, và trường hợp đó sẽ không có tất cả của tôi các loại khác được đăng ký với nó. Tôi cũng không thấy một cách để xây dựng container, đăng ký tất cả các loại trong nó, và sau đó đăng ký cá thể đó với IWindsorContainer - tất cả các phương thức đăng ký chỉ sử dụng các kiểu cho dịch vụ và thực hiện - không bao giờ là một thực thể cụ thể.

Trả lời

8

Nói chung bạn không muốn đưa vùng chứa vào các thành phần ứng dụng của mình.

Xem những câu hỏi (câu hỏi này gần như là một bản sao của họ):

BTW: bạn nhận được IKernel tiêm miễn phí, và bạn có thể đăng ký IWindsorContainer:

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
+0

IKernal đã làm việc cho tôi. Không cần toàn bộ WindsorContainer cho lớp của tôi. – DavGarcia

1

Nói chung, như mausch cho biết, hãy suy nghĩ kỹ trước khi bạn chuyển vật chứa vào thành phần của bạn. Bạn có thực sự cần có quyền truy cập vào vùng chứa không?

Để kéo phụ thuộc từ việc sử dụng vùng chứa typed factories.

0

Gần đây tôi đã bị cám dỗ thực hiện việc này. Tôi muốn có thể tạo nhiều phiên bản của một dịch vụ trong suốt thời gian tồn tại của một đối tượng. Đăng ký một nhà máy sẽ tốt hơn ở chỗ nhu cầu về sự phụ thuộc rõ ràng hơn. Nhưng việc tạo ra một nhà máy cho mỗi dịch vụ có vẻ như là một nỗi đau.

Tôi đã sử dụng một cái gì đó giống như mã trong bài viết này: http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html. Giả sử bạn có một lớp cần tạo các cá thể của IService. Bài viết mô tả một kỹ thuật cho phép lớp của bạn có sự phụ thuộc vào Func và bạn sẽ tự động nhận được một nhà máy cụ thể cho lớp đó.

Các vấn đề liên quan