2009-05-20 28 views

Trả lời

4

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 đó.

1

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.

5

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.

2

(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.

1

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ự.

+0

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ó. –

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