2010-11-12 41 views
5

Tôi đang giới thiệu Ninject vào một mớ hỗn độn lớn của một dự án hiện có. Tôi muốn viết một bài kiểm tra chẩn đoán để đảm bảo rằng tất cả các lớp Ninject sẽ kết thúc tạo ra có thể thực sự được giải quyết bởi Ninject ... mà không thực sự tạo ra bất kỳ của chúng.Làm thế nào để dễ dàng biết liệu Ninject có thể giải quyết một lớp học

Lý do tôi muốn tránh việc xây dựng thực tế là nhiều người trong số các lớp này có xu hướng bắt đầu hoạt động cơ sở dữ liệu trong các nhà thầu của họ (thở dài vâng tôi biết). Nếu không tôi sẽ chỉ chạy chúng tất cả thông qua Get<T> với try/catch

Trả lời

4

Có một phần mở rộng CanResolve trên IResolutionRoot (ví dụ, bạn có thể sử dụng nó chống lại Kernel nếu bạn có quyền using s tại chỗ). Có một số CreateRequest mà bạn sử dụng để tạo yêu cầu. Có một cái nhìn trong các nguồn và thử nghiệm nếu bạn cần một ví dụ hoặc bất kỳ thông tin sâu sắc hơn.

1

Tôi biết đây là bài đăng cũ nhưng đây là bài đăng đầu tiên tôi tìm thấy cách tìm kiếm xem lớp học có thể được giải quyết bởi Ninject mà không thực sự gọi get() và mạo hiểm ngoại lệ.

phiên bản 3.0.2 Ninject có một CanResolve phương pháp mà trả về một boolean:

kernel.CanResolve<T>() 

tôi 3.0.2 từ NuGet nhưng hiện tại nó ra thị trường không ổn định (Ninject.3.0.2-unstable-9037) vì vậy tôi 'không chắc chắn nếu tôi sử dụng điều này trong sản xuất chỉ được nêu ra.

+1

Không may, 'CanResolve' không nhìn vào cây phân giải. Vì vậy, nếu nó thiếu một ràng buộc về một phụ thuộc thứ tự thứ hai, nó sẽ không cho bạn biết. –

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