2010-08-26 19 views
8

Tôi đã đăng ký một thành phầnCho phép tùy chọn (null) bất động sản tiêm trong Castle Windsor thông qua phương pháp nhà máy?

container.Register(Component.For<XType>() 
.LifeStyle.Is(LifestyleType.Transient) 
.UsingFactoryMethod(SomeMethod)); 

và hiện đang sử dụng này để tiêm tài sản trên bộ điều khiển ASP.NET MVC của tôi. Tuy nhiên - vấn đề hiện tại của tôi là SomeMethod có thể trả về null đôi khi. Lâu đài không phải là tất cả quá hạnh phúc về điều này và phàn nàn về một trường hợp null.

Có cách nào gọn gàng để định cấu hình Windsor để cho phép thành phần này rỗng không? Tôi đã khám phá các tài liệu nhưng chưa tìm ra cách để làm điều đó.

Cảm ơn.

+0

Khách hàng của bạn có xử lý các tham chiếu thành phần không? Bạn có thể đặt mã xử lý null trong thực thi mặc định và tạo nó thay vì trả về null – onof

+0

Tôi đang sử dụng mẫu NullObject như một giải pháp tạm thời. Một tùy chọn khác có thể là gói nó trong một thành phần khác mà chỉ trả về giá trị null/non-null - nhưng có vẻ như nó khá khó xử. – RasmusKL

+0

xem câu trả lời cập nhật của tôi. –

Trả lời

6

Không, không có cách nào để chuyển giá trị rỗng qua Windsor.

Nếu thành phần là rỗng, hơn nó rõ ràng là không thể được sử dụng, do đó, nó sẽ là vô nghĩa nếu đó sẽ là có thể anyway.

Nếu bạn đang sử dụng thành phần này chỉ làm thuộc tính trên một số thành phần khác, tôi nghĩ sẽ tốt hơn nếu chỉ chuyển nó thành DynamicParameter. Windsor sau đó sẽ bỏ qua nó nếu nó là null.

+3

Đó là một phụ thuộc tạm thời đôi khi không có giá trị - thường là nó có giá trị có ý nghĩa - phương thức nhà máy được gọi cho mỗi yêu cầu. Tôi không thể thấy nó hoàn toàn vô nghĩa như thế nào. – RasmusKL

+3

Tôi đồng ý rằng sẽ hữu ích khi cho phép null. Đó sẽ là cách tốt để đảo ngược các đối tượng tĩnh, ví dụ: trong WCF, 'ServiceSecurityContext.Current'. Tuy nhiên, điều đó tất nhiên có thể là null nếu người dùng không được xác thực. Một mẫu đối tượng null là cách tốt nhất. –

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