Câu hỏi thực hành tốt nhất ngắn: Nếu đối tượng A được tiêm vào đối tượng B khác, thì đối tượng B có thực thi IDisposable và bỏ A khi B được xử lý không?Các thuộc tính được tiêm phải được xử lý?
Trả lời
Tôi thường nói không; bản chất của tiêm phụ thuộc có nghĩa là các đối tượng tiêm không biết nhiều về vòng đời của những gì nó đã được tiêm; ở một mức độ nào đó, đây là định nghĩa về tiêm. Như vậy, tôi không nghĩ rằng đối tượng tiêm phải vứt bỏ bất cứ thứ gì nó đã được tiêm; mã tiêm phải chịu trách nhiệm cho biết vòng đời hoàn chỉnh của tất cả các đối tượng mà nó đang tiêm và có thể xử lý đúng cách khi tất cả các hoạt động trên chúng hoàn tất và không phải trước đó.
Tôi nghĩ điều đó thực sự sẽ trở thành chủ quan.
Tất cả sẽ bị lu mờ xuống, Ai nên kiểm soát tuổi thọ của đối tượng A?
Nói ví dụ đối tượng C và D cũng có đối tượng A được tiêm vào chúng, trong trường hợp đó bạn sẽ không muốn đối tượng B xử lý đối tượng A sớm.
Tuy nhiên, trong một số trường hợp khi bạn biết thời gian tồn tại của đối tượng A nên kết thúc với B, nó là hoàn toàn thích hợp để có đối tượng B dispose của đối tượng A.
Nếu bạn đang đề cập đến mô hình dependency injection, tôi nghĩ rằng nó phụ thuộc vào kiến thức trong Object B về việc thực hiện Object A. Lý do làm tiêm phụ thuộc như thế này thường là vì bạn không biết trước cách Object A sẽ được triển khai như thế nào và liệu nó có cần IDisposable hay không. Điều duy nhất bạn biết là giao diện.
Thêm hành vi này sẽ dẫn đến kết nối chặt chẽ giữa hai lớp, IMO.
(chỉnh sửa: khi trả lời, nó không rõ ràng với tôi rằng câu hỏi là về IoC/DI; Tôi sẽ để đây ở đây để tham khảo, nhưng nhìn đầu tiên ở câu trả lời được chấp nhận).
Nếu bằng "được tiêm", nghĩa là B
giả định quyền sở hữu của A
, thì có; ví dụ về điều này sẽ là những thứ như StreamReader
.
Nếu nó chỉ sử dụngA
trong một thời gian (nhưng A
tiếp tục sống ngoài B
) thì không có.
Một số API cho phép bạn chỉ định (trên hàm tạo) cho dù quyền sở hữu có được giả định hay không (tức là có nên dọn sạch đối tượng được tiêm) hay không. Một ví dụ về điều này sẽ là GZipStream
.
2p của tôi sẽ cho rằng A không được xử lý khi B được xử lý. Toàn bộ ý tưởng về tiêm phụ thuộc là bạn không phải lo lắng về bahaviour và vòng đời của các đối tượng mà bạn đang nhận, bạn chỉ cần trao chúng.
Sau đó, một lần nữa bạn muốn đảm bảo rằng đối tượng được làm sạch ngay sau khi nó không còn cần thiết nữa. Có thể tạo một hệ thống sự kiện nhỏ để bạn có thể thông báo cho nó cần phải được xử lý? Tôi đoán nó phụ thuộc vào bối cảnh thực sự.
- 1. Xử lý C# Các thuộc tính không được rỗng
- 2. Backbone.JS xử lý các mô hình với các thuộc tính được tính như thế nào
- 3. Xử lý ngoại lệ khi sử dụng tính năng tiêm phụ thuộc trong C# 4.0
- 4. Thuộc tính Assembly C++ được quản lý
- 5. Thuộc tính xử lý trong Scala
- 6. Weka, SimpleKMeans không thể xử lý các thuộc tính chuỗi
- 7. Xử lý các thuộc tính xml tùy chọn trong Scala
- 8. Cách xử lý các thuộc tính tùy chỉnh trong AutoMapper
- 9. tiêm phụ thuộc chú thích xử lý các môi trường khác nhau
- 10. Ninject 2.0: Tiêm thuộc tính không có thuộc tính
- 11. Tiêm phụ thuộc: tiêm các đối tượng được khởi tạo một phần
- 12. Windows 7: Trình xử lý thuộc tính hoạt động trong Explorer nhưng không phải FileOpenDialog?
- 13. Tiêm phụ thuộc và ghi tên được đặt tên
- 14. Việc truy cập phụ thuộc được tiêm vào trong hàm tạo bean được quản lý gây ra NullPointerException
- 15. DbContext đã được xử lý
- 16. Xử lý vấn đề ngoại lệ chưa được xử lý
- 17. Nhận quy trình đang chạy xử lý được xử lý
- 18. làm thế nào để đính kèm xử lý sự kiện jquery cho html mới được tiêm?
- 19. Thuộc tính DllImport luôn tải DLL không được quản lý
- 20. Làm cách nào để tiêm/tạo mã ống nước vào các phương pháp được trang trí với Thuộc tính?
- 21. Bản phát hành được xử lý như thế nào đối với các thuộc tính giữ lại @synthesized?
- 22. phụ thuộc tiêm cho NServiceBus đơn vị xử lý thử nghiệm
- 23. Làm thế nào để xử lý các giao thức Objective-C có chứa các thuộc tính?
- 24. Các tính năng thuộc tính video được đệm trong HTML5
- 25. JSF - Bean được quản lý theo phiên không có phụ thuộc được tiêm lại trên phiên deserialization
- 26. Bất kỳ lý do nào để sử dụng các thuộc tính được tự động triển khai trên các thuộc tính được thực hiện thủ công?
- 27. jQuery: xử lý một khoảng trống trong thuộc tính id
- 28. Cách xử lý các thực thể thuộc tính khác nhau cho các thực thể khác nhau
- 29. Tại sao không phải tất cả các biến này được xử lý theo cùng một cách?
- 30. Setter/thuộc tính tiêm trong Unity mà không có thuộc tính
Trong trường hợp đó, bạn sẽ cần một số loại tham chiếu để đối tượng A không được xử lý trước khi một số lớp sử dụng nó. –