Tôi muốn rõ ràng "giải phóng" đối tượng được giải quyết bởi Unity. Tôi hy vọng phương pháp Teardown nên được sử dụng một cách chính xác cho điều này vì vậy tôi cố gắng một cái gì đó như thế này:Phương thức UnityContainer.Teardown nên làm gì?
container.RegisterType(typeof(IMyType), typeof(MyType),
new MyLifetimeManager());
var obj = container.Resolve<IMyType>();
...
container.Teardown(obj);
MyLifetimeManager
cửa hàng đối tượng dụ trong HttpContext.Current.Items
. Tôi hy vọng rằng phương pháp Teardown
sẽ gọi RemoveValue
trên trình quản lý lâu dài và phát hành cả phiên bản MyType và phiên bản trình quản lý lâu dài. Nó không hoạt động. Trước hết, RemoveValue
không được gọi và nếu tôi gọi lại số Resolve<IMyType>
, tôi sẽ nhận được bản sao đã được giải quyết trước đó.
Phương thức Teardown
nên làm gì? Làm thế nào tôi có thể giải phóng đối tượng bất chấp người quản lý suốt đời của mình?
Edit:
Nếu Teardown
không nhả dụ, ai làm? Ai gọi số RemoveValue
trên người quản lý lâu dài?
xem xét "làm sạch nó" mơ hồ trên MSDN, tôi giả định TearDown trả về một đối tượng nguyên sơ, như thể nó vừa được tạo. – Massif
(Mặc dù nhìn qua nguồn Unity, không thể thấy nhiều triển khai của Teardown làm bất cứ điều gì cả ... Nhưng không có thời gian để kiểm tra tất cả.) – Massif