UnityContainer.Teardown方法应该做什么?

时间:2011-02-08 13:07:13

标签: .net unity-container

我想明确“释放”Unity解析的对象实例。我希望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

1 个答案:

答案 0 :(得分: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();
                }
            }