2012-05-09 38 views
11

Tôi có một lớp với hàm tạo có tham số có giá trị mặc định. Với Ninject 2.2, nó sẽ tôn vinh những thuộc tính [Optional] và hoạt động tốt không có ràng buộc được xác định chống lại một constructor tuyên bố như vậy:Sử dụng giá trị tham số mặc định với Ninject 3.0

public EmployeeValidator([Optional] IValidator<PersonName> personNameValidator = null) 

Kể từ khi nâng cấp lên Ninject 3.0, xây dựng của đối tượng này không thành công với một thông báo nói rằng nhà cung cấp trở lại null:

phương pháp thử ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest ném ngoại lệ:

Ninject.ActivationException: Lỗi activatin g IValidator {PersonName} sử dụng khả năng tự ràng buộc có điều kiện của IValidator {PersonName}

Nhà cung cấp trả về null.

kích hoạt đường dẫn:

2) Tiêm phụ thuộc IValidator {PERSONNAME} vào tham số personNameValidator của constructor loại EmployeeValidator

1) Yêu cầu IValidator {nhân viên}

Gợi ý:

1) Đảm bảo rằng nhà cung cấp xử lý các yêu cầu tạo đúng cách.

Thuộc tính [Optional] vẫn được tôn trọng khi có giá trị mặc định cho tham số và cách tốt nhất để xử lý tiêm với thông số tùy chọn như thế này?

Trả lời

15

Thuộc tính tùy chọn bị bỏ qua trong trường hợp này vì luôn có giá trị mặc định khả dụng- Nhưng giá trị được cung cấp là null. Null không phải là giá trị được phép theo mặc định.

Bạn có thể ghi đè hành vi này bằng cách đặt NinjectSettings.AllowNullInjection thành true.

+0

Điều đó có ý nghĩa. Cảm ơn Remo! –

+0

@The Davester: Mùi giống như yêu cầu kéo để cải thiện thông báo lỗi: P –

+3

'NinjectSettings.AllowNullInjection' thường là thuộc tính' kernel.Settings 'cho những người giả sử đó là thuộc tính tĩnh. – nicodemus13

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