Tôi có một lớp thực hiện nhiều giao diện. Tôi muốn đăng ký các giao diện này thông qua XML. Tất cả những gì tôi tìm thấy là tài liệu cho Giao diện thông thạo mới. Tùy chọn này có được hỗ trợ qua XML không? Điều gì sẽ liên quan đến việc thêm tính năng này?Hỗ trợ Castle-Windsor ForwardedTypes qua cấu hình XML
Trả lời
[Cập nhật] Điều này hiện có thể có trong Windsor 2.1 trở lên. Xem tài liệu về cú pháp here.
Tính năng này chưa được thực hiện trong các phiên dịch XML như được nêu ra .. Tuy nhiên nó không phải là khó khăn để hỗ trợ thêm cho nó thông qua một cơ sở (rõ ràng là kỹ thuật này cũng rất hữu ích khi muốn thêm các tính năng khác vắng mặt trình phân tích cú pháp cấu hình hiện có).
Vì vậy, trước hết chúng ta thêm một cơ sở đó sẽ phát hiện khi một handler được tạo ra cho một loại, và đồng thời sẽ đăng ký bất kỳ dịch vụ chuyển tiếp để họ trỏ đến xử lý hiện có:
public class HandlerForwardingFacility : AbstractFacility
{
IConversionManager conversionManager;
protected override void Init()
{
conversionManager = (IConversionManager)Kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);
Kernel.HandlerRegistered += new HandlerDelegate(Kernel_HandlerRegistered);
}
void Kernel_HandlerRegistered(IHandler handler, ref bool stateChanged)
{
if (handler is ForwardingHandler) return;
var model = handler.ComponentModel;
if (model.Configuration == null) return;
var forward = model.Configuration.Children["forward"];
if (forward == null) return;
foreach (var service in forward.Children)
{
Type forwardedType = (Type)conversionManager.PerformConversion(service, typeof (Type));
Kernel.RegisterHandlerForwarding(forwardedType, model.Name);
}
}
}
và sau đó dĩ nhiên chúng ta cần phải tận dụng điều này trong mã, ví dụ này tôi sẽ có một thành phần vịt/con chó đột biến có hỗ trợ hai dịch vụ riêng biệt - IDuck và IDog:
public interface IDog
{
void Bark();
}
public interface IDuck
{
void Quack();
}
public class Mutant : IDog, IDuck
{
public void Bark()
{
Console.WriteLine("Bark");
}
public void Quack()
{
Console.WriteLine("Quack");
}
}
Bây giờ để thực sự cấu hình vùng chứa:
<castle>
<facilities>
<facility id="facility.handlerForwarding" type="Example.Facilities.HandlerForwardingFacility, Example" />
</facilities>
<components>
<component id="mutant" service="Example.IDog, Example" type="Example.Mutant, Example">
<forward>
<service>Example.IDuck, Example</service>
</forward>
</component>
</components>
</castle>
Và bây giờ chúng ta hạnh phúc có thể thực hiện một thử nghiệm như thế này:
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
var dog = container.Resolve<IDog>();
var duck = container.Resolve<IDuck>();
Assert.AreSame(dog, duck);
Hope this helps.
- 1. Cấu hình JSON hỗ trợ Spring?
- 2. không được hỗ trợ cấu hình
- 3. Cấu hình Xml hoặc Cấu hình thông qua mã?
- 4. Cách cấu hình Spring Social qua XML
- 5. Bộ mã cấu hình CodeIgniter và hỗ trợ UTF-8
- 6. Cách định cấu hình hỗ trợ HTTPS trong squid3
- 7. Định cấu hình ActiveResource để hỗ trợ OAuth2
- 8. Làm cho nút cấu hình hỗ trợ cả chuỗi và mảng trong cấu hình Symfony 2?
- 9. iPhone có hỗ trợ XML-RPC không?
- 10. Trình chỉnh sửa XML hỗ trợ 1,1
- 11. Cần thành phần xml hỗ trợ D2009
- 12. Làm cách nào để cấu hình JPA EntityListener qua tệp cấu hình Spring XML?
- 13. CastleWindsor 3.0 và DefaultServiceHostFactory.RegisterContainer()?
- 14. không được hỗ trợ cấu hình đồng bằng phong cách không được hỗ trợ trong một mục navigation
- 15. Spring REST 3 để hỗ trợ XML và JSON
- 16. Renderscript qua thư viện hỗ trợ
- 17. Hỗ trợ Scala XML hoạt động như thế nào?
- 18. Hỗ trợ JPA cho các cột dữ liệu XML
- 19. Cấu hình Proguard của Android cho Thư viện hỗ trợ v7 ActionBar
- 20. "Hệ thống cấu hình hiện tại không hỗ trợ cài đặt phạm vi người dùng"
- 21. Nhiều jpa: kho lưu trữ trong cấu hình xml, cách cấu hình với @EnableJPARepositories bằng cấu hình Spring java?
- 22. Hỗ trợ Ruby cho các không gian tên XML
- 23. Có ngôn ngữ lập trình nào hỗ trợ xml không?
- 24. DataTable không hỗ trợ suy luận lược đồ từ Xml.?
- 25. Trạng thái hỗ trợ XML trong Scala 2.9.x
- 26. ActionBar (Hỗ trợ) với Fragment (hỗ trợ)
- 27. CPU và cấu hình không được hỗ trợ cho phiên jvisualvm từ xa
- 28. Làm thế nào để cấu hình PlayFramework2 để hỗ trợ SSL?
- 29. Bảng phân cảnh - Cấu hình không được hỗ trợ 8 ràng buộc xung đột
- 30. Trình phân tích cú pháp cấu hình Python hỗ trợ kế thừa phần?
Chỉ cần bạn biết, hiện tại nó đã được đưa vào khuôn khổ. –
@Krzysztof: Tôi yêu cầu chức năng này và không muốn phát minh lại bánh xe. Thật không may, không thể tìm thấy bất cứ điều gì về điều này. Bất kỳ tài liệu hoặc liên kết nào liên quan đến việc chuyển tiếp kiểu dựng sẵn thông qua cấu hình Xml? –
johny g - nó có trong tài liệu: http://www.castleproject.org/container/documentation/v21/manual/windsorconfigref.html –