2010-07-26 40 views
49

thể trùng lặp:
What is dependency injection?Tiêm phụ thuộc là gì?

mùa xuân là khuôn khổ từ nơi mà khái niệm Dependency Injection đến hình ảnh.

Mục đích của DI là gì? Nó được hưởng lợi như thế nào? Nó được thực hiện như thế nào?

+2

Giải thích đơn giản và rõ ràng nhất về DI trong mã: http://codeflex.co/java-dependency-injection-simple-example/ –

Trả lời

61
+1

Về cơ bản, thay vì để đối tượng tạo phụ thuộc hoặc yêu cầu đối tượng nhà máy tạo cho chúng, bạn truyền các phụ thuộc cần thiết vào constructor hoặc thông qua các property setters, và bạn làm cho nó trở thành vấn đề của người khác (một đối tượng tiếp tục thêm đồ thị phụ thuộc, hoặc một injector dependency để xây dựng đồ thị phụ thuộc). Một phụ thuộc như tôi đang sử dụng nó ở đây là bất kỳ đối tượng khác đối tượng hiện tại cần phải giữ một tham chiếu đến. –

+4

Tôi đã xóa các nhận xét meta tại đây. Nếu bạn muốn có một cuộc thảo luận về tiện ích của câu trả lời với các liên kết trong đó, hãy làm như vậy trong trò chuyện hoặc trên [Meta] (http://meta.stackoverflow.com). –

+1

Một liên kết rất hữu ích khác mà tôi đã tìm thấy khi đọc tiêm phụ thuộc lần đầu tiên: https://www.objc.io/issues/11-android/dependency-injection-in-java/ –

21

Mục đích của DI là gì?

Mục đích của Dependency Injection là giảm khớp nối trong ứng dụng của bạn để làm cho nó linh hoạt và dễ kiểm tra hơn.

Lợi ích của nó như thế nào?

Đối tượng không có phụ thuộc mã hóa cứng. Nếu bạn cần thay đổi việc thực thi phụ thuộc, tất cả những gì bạn phải làm là Tiêm một loại đối tượng khác.

Làm cách nào để triển khai?

Có nhiều phương pháp khác nhau của Dependency Injection. Hãy xem Wikipedia article để xem các ví dụ về từng loại. Một khi bạn hiểu những điều đó, bạn có thể bắt đầu điều tra các khuôn khổ Dependency Injection khác nhau.

+2

Xin chào, bạn có thể vui lòng cho tôi biết: tại sao khó có thể kiểm tra khi một lớp phụ thuộc vào một lớp khác không? Đã đọc rất nhiều về điều này, tôi vẫn không hiểu tại sao, giả sử, lớp A sử dụng 'new' để khai báo lớp B sẽ làm bài kiểm tra khó khăn. Cảm ơn rất nhiều trước. – Unheilig

+0

@Unheilig - Lớp thử nghiệm 'A' sẽ rất khó vì bạn không có cách nào để xác định hành vi của' B' cho bài kiểm tra của bạn. Hãy nhớ rằng, bạn chỉ muốn kiểm tra mã của mình ... không phải tất cả mã mà mã của bạn phụ thuộc. –

0

DI cho phép chúng tôi trao đổi các thành phần, cải thiện khả năng kiểm tra và đảm bảo rằng các thành phần được ghép lỏng lẻo. DI cho phép để giải quyết các phụ thuộc vào thời gian chạy bằng cách sử dụng DI container như Windsor Castle, Unity, Spring.net, MEF cho phép các ứng dụng được mở rộng.

8

Rất ngắn,

Mục đích của DI là gì? Với việc tiêm phụ thuộc, các đối tượng không tự xác định các phụ thuộc của chúng, các phụ thuộc được tiêm vào chúng khi cần thiết.

Lợi ích của nó như thế nào? Các đối tượng không cần phải biết ở đâu và làm thế nào để có được sự phụ thuộc của họ, mà kết quả trong khớp nối lỏng lẻo giữa các đối tượng, mà làm cho họ dễ dàng hơn nhiều để kiểm tra.

Làm cách nào để triển khai? Thông thường một thùng chứa quản lý vòng đời của các đối tượng và các phụ thuộc của chúng dựa trên tệp cấu hình hoặc chú thích.

+2

Xin chào, bạn có thể vui lòng cho tôi biết: tại sao thật khó để kiểm tra khi một lớp học phụ thuộc vào một lớp khác? Đã đọc rất nhiều về điều này, tôi vẫn không hiểu tại sao hãy nói lớp A sử dụng 'new' để khai báo lớp B sẽ làm bài kiểm tra khó khăn. Cảm ơn rất nhiều trước. – Unheilig

+0

@Unheilig https://www.youtube.com/watch?v=hBVJbzAagfs –

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