14

Tôi có một câu hỏi đơn giản ở đây về Castle Windsor, mà tôi chưa sử dụng trong thời gian dài. Tôi đang cố gắng để đăng ký một dịch vụ với một trường hợp cụ thể sẽ được thực hiện singleton của dịch vụ.Chỉ định trường hợp đăng ký thành phần với Castle Windsor

Vùng chứa không thể cố gắng tự tạo bản thân dịch vụ vì nó có các gói phụ thuộc mà vùng chứa sẽ không thể giải quyết được. Tôi có một trường hợp của dịch vụ và tôi muốn đó là một trong những trường hợp duy nhất được sử dụng cho bất cứ ai yêu cầu dịch vụ. Nhưng tôi dường như có rất ít may mắn.

tôi trong giây lát đã hy vọng lớn lên bằng cách sử dụng mã này:

container.Register(Component.For<IMyInterface>().Instance(serviceObj)); 

Nhưng tất cả Castle làm với ví dụ là làm một .GetType() vào nó và đăng ký các loại. Các yêu cầu đối với dịch vụ sau đó sẽ khiến thùng chứa cố gắng tạo loại đó và không thành công khi không thể lấp đầy các phụ thuộc.

Vậy có cách nào để làm những gì tôi muốn làm ở đây không? Nếu không, tôi sẽ tạo ra một loại IServiceProvider nào đó tìm nạp cá thể của dịch vụ và không phụ thuộc vào container để điền vào. Nhưng điều này cảm thấy giống như một công việc xung quanh hơn là giải pháp đúng.

Mọi đề xuất? Cảm ơn!

Trả lời

21

Thử sử dụng phương pháp AddComponentInstance trên đối tượng Kernel của vùng chứa. Tôi nghĩ rằng đây là những gì bạn cần.


Xin lưu ý: Kỹ thuật này hiện không được chấp nhận. Sử dụng container.Register(Component.For<T>().Instance(myT)); thay vì (nhờ eouw0o83hf)

+0

Cảm ơn Gerrie và Bojan! Làm việc một điều trị. –

+8

Lưu ý ngắn gọn, kỹ thuật này hiện không được chấp nhận. Sử dụng 'container.Register (Component.For () .Instance (myT));' thay thế. – eouw0o83hf

+0

Liên kết đó cũng đã chết ngay bây giờ – Liam

2

Bạn có thể làm điều đó thông qua các Kernel tài sản của container:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj); 
Các vấn đề liên quan