2011-02-08 70 views
6

我想明確地「釋放」由Unity解決的對象實例。我希望的刪除方法應該正好用於此所以我想是這樣的:UnityContainer.Teardown方法應該做什麼?

container.RegisterType(typeof(IMyType), typeof(MyType), 
    new MyLifetimeManager()); 
var obj = container.Resolve<IMyType>(); 
... 
container.Teardown(obj); 

MyLifetimeManager專賣店在HttpContext.Current.Items對象實例。我預計Teardown方法將在生命期管理器上調用RemoveValue並釋放MyType實例和生命期管理器實例。它不起作用。首先RemoveValue不叫,如果我再次撥打Resolve<IMyType>我會得到以前解決實例。

Teardown方法應該做什麼?儘管有他的一生經理,我怎樣才能釋放對象?

編輯:

如果Teardown不釋放的情況下,誰做?誰在終身管理者電話RemoveValue

+0

看模糊的「清除它」在MSDN評論,我假設TearDown中返回原始的對象,就好像它是新創建的。 – Massif 2011-02-08 13:22:09

+0

(雖然通過Unity來源看,不能看的拆解做任何事情都很多實現......但是,沒有時間去檢查他們。) – Massif 2011-02-08 13:28:01

回答

4

Unity TearDown不開箱即用。您不需要從HttpContext.Current.Items中刪除,因爲它將在請求結束時自動清除。你可能想要做的就是在存儲在那裏的任何IDisposable對象上調用Dispose。你會在Global.asax中做到這一點從EndRequest:

foreach (var item in HttpContext.Current.Items.Values) 
      { 
       var disposableItem = item as IDisposable; 

       if (disposableItem != null) 
       { 
        disposableItem.Dispose(); 
       } 
      }