Tôi tự hỏi làm cách nào để quản lý một đối tượng bằng DI. Giả sử tôi có một lớpQuản lý các lớp Dùng một lần Sự phụ thuộc Tiêm
class Foo : IFoo, IDisposable
{
// ...
}
Sau đó, lớp này được tiêm vào lớp khác
class Bar
{
public Bar(IFoo foo)
{
this.Foo = foo
}
IFoo Foo { get; set; }
}
Sau đó, tôi ràng buộc này trong một số phạm vi (ví dụ của tôi sử dụng MVC và Ninject)
this.Bind<IFoo>().To<Foo>().InRequestScope();
tôi Tôi tự hỏi, vì khuôn khổ Dependency Injection xử lý vòng đời của Foo
, tôi có nên triển khai IDispoable trong Bar
không? Suy nghĩ của tôi là DI đang quản lý vòng đời của Foo
, vì vậy đừng chạm vào nó, trong trường hợp một lớp khác đang sử dụng Foo
. Ngoài ra, vì đối tượng dùng một lần được chuyển thành Bar
làm tham số hàm tạo, Bar
không quấn đối tượng dùng một lần, vì vậy không biết người gọi Bar
muốn sử dụng Foo
sau Bar
là rác được thu thập. Thê nay đung không?
Nicholas Blumhardt có bài đăng tuyệt vời về chủ đề này, sử dụng Autofact làm ví dụ nhưng áp dụng chung trong http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/ – fsimonazzi
Nhìn vào một số bài viết MSDN, dường như Microsoft sẽ thực hiện cả hai: http://msdn.microsoft.com/en-us/library/yhfzs7at%28v=vs.110%29 (StremReader) "Đối tượng StreamReader gọi Dispose() trên đối tượng Luồng được cung cấp khi StreamReader .Dispose được gọi là " nhưng http://msdn.microsoft.com/en-us/library/z7ha67kw%28v=vs.110%29 (Bitmap)" Bạn phải giữ luồng mở trong suốt thời gian của Bitmap. " – Michael