2012-10-25 26 views
7

Tôi có thể thấy rằng các câu hỏi tương tự đã được hỏi trước đây, nhưng hoàn toàn mới đối với DI và. Net Tôi không thể giải quyết toàn bộ giải pháp hoặc có thể không tìm thấy đúng nguồn ....Làm thế nào để sử dụng Ninject trên các cụm

  • Tôi có các hội đồng WebAPI, BL, DL.
  • WebAPI phụ thuộc vào BL,
  • BL phụ thuộc vào DL,
  • WebAPI KHÔNG tham khảo DL và tôi muốn giữ nó như vậy. Có vài hội đồng hơn nhưng điều này là đủ để minh họa các vấn đề.

WebAPI có phần bắt đầu ứng dụng vì vậy tôi có thể sử dụng nó để khởi tạo hạt nhân Ninject và đăng ký phụ thuộc cho dự án WebAPI.

Làm cách nào để đạt được điều tương tự cho BL và các hội đồng khác?

Trả lời

3

Có một vài cách khác nhau, bạn có thể sử dụng Ninject Conventions automagically giải quyết mọi ISomething để thực hiện điều đó có cùng tên (ví dụ IThing ->Thing) hoặc bạn có thể tạo một Ninject Module trong từng lắp ráp mà đăng ký phụ thuộc (các mô-đun trong BL của bạn có thể tải các mô-đun trong DL của bạn).

Cách tiếp cận bạn thực hiện sẽ phụ thuộc vào việc bạn có cần xác định các phạm vi khác nhau cho các đối tượng khác nhau không, ví dụ như bạn muốn một số thứ được giải quyết như đơn có thể ảnh hưởng đến phương pháp bạn sử dụng.

+0

Cảm ơn Trevor, tôi hiểu khái niệm nhưng không biết làm thế nào và ở đâu để thực hiện logic trong BL Assembly. – user1767363

+0

Bạn có thể cung cấp ví dụ về cách mỗi mô-đun thiết lập hạt nhân cho Ninject không? Tôi đang cố gắng tìm hiểu cách giải quyết vấn đề này. – Wavel

+0

@Wavel - Tôi đã thêm liên kết vào câu trả lời. –

0

Tôi nghĩ rằng Mark Seemann's advice about this thật tuyệt vời - hãy tạo một gốc thành phần ở lớp có thể cao nhất trong ứng dụng của bạn. Đối với các ứng dụng web, điều này có nghĩa là trong tệp Globals.asax. Tôi có thể giải thích lý do chính đáng cho điều này, nhưng bài đăng trên blog được liên kết thực hiện công việc tốt hơn.

Điều này làm vỡ lớp mà bạn đang cố gắng đạt được, nhưng chỉ rất ít, và những gì tôi nghĩ là một cách thích hợp. Nếu lớp web của bạn là mỏng một cách thích hợp (nghĩa là, bạn có thể thay thế nó bằng một khách hàng dày khá dễ dàng) thì đó không phải là một mất mát lớn. Nếu bạn thực sự bất lợi với điều đó, bạn có thể tạo một gốc thành phần trong BL cho DL.

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