Say, rằng tôi có cấu trúc dự án sau:phụ thuộc tiêm vs lắp ráp phụ thuộc nào
Application <-> BusinessLogic <-> DataAccessLayer
tôi đã chuẩn bị tất cả các loại sử dụng kém man's-phụ thuộc-tiêm và bây giờ tôi muốn giới thiệu một trong những thực sử dụng Unity. Nhưng tôi đang đấu tranh về nơi để đặt container phụ thuộc và cấu hình của nó (tôi cho rằng tôi sẽ cấu hình nó từ mã).
- DataAccessLayer cần phải đăng ký Context (EF)
- BusinessLogic nhu cầu đăng ký các kho dữ liệu (mà sử dụng ngữ cảnh)
- Application cần đăng ký dịch vụ (mà sử dụng kho)
Hiện tại, hội đồng duy nhất sử dụng vùng chứa để thực sự khởi tạo các lớp sẽ là Ứng dụng. Vì vậy, tôi có sơ đồ phụ thuộc sau:
- DI sử dụng DataAccessLayer
- DI sử dụng được BusinessLogic
- DI sử dụng Application
- Application sử dụng DI
Tôi có tham chiếu vòng tròn ở đây, vì vậy nó có vẻ hợp pháp để đưa DI bên Application. Nhưng sau đó tôi phải tham khảo DataAccessLayer và đó là sự phụ thuộc mà tôi không muốn tạo. Tôi nên giải quyết vấn đề này như thế nào?
"DI" không được phụ thuộc vào bất kỳ điều nào trong số này. Tùy thuộc vào máy khách ('Ứng dụng' trong trường hợp của bạn) để đăng ký các phụ thuộc * bằng cách sử dụng * DI. – haim770
@ haim770 Bằng cách "DI sử dụng *", tôi có nghĩa là: "Ai đó, người đăng ký các loại từ * phải có quyền truy cập vào nó". Nếu tôi đăng ký các loại từ 'Application', tôi phải tạo một phụ thuộc vào' DataAccessLayer', nhưng tôi không muốn làm điều đó (nếu có thể, ít nhất). – Spook
Ngay cả khi bạn đang ủy nhiệm đăng ký cho dự án DI, bạn không thực sự đạt được bất cứ điều gì như là cuối cùng ứng dụng * là * phụ thuộc vào những hội đồng và họ * sẽ * được tham chiếu. Có lẽ những gì bạn đang thực sự sau khi đăng ký năng động bằng cách sử dụng Assembly Scanning (http://autoregistration.codeplex.com/)? – haim770