UnityContainer.Teardown方法应该做什么?

Lad*_*nka 6 .net unity-container

我想明确"释放"Unity解析的对象实例.我希望Teardown方法应该完全用于此,所以我尝试了这样的事情:

container.RegisterType(typeof(IMyType), typeof(MyType), 
    new MyLifetimeManager());
var obj = container.Resolve<IMyType>();
...
container.Teardown(obj);
Run Code Online (Sandbox Code Playgroud)

MyLifetimeManager存储对象实例HttpContext.Current.Items.我希望该Teardown方法将调用RemoveValue生命周期管理器并释放MyType实例和生命周期管理器实例.它不起作用.首先RemoveValue是没有调用,如果我再次调用,Resolve<IMyType>我将获得先前解析的实例.

Teardown方法应该怎么办?尽管有他的终身经理,我怎么能释放对象?

编辑:

如果Teardown没有发布实例,谁呢?谁打电话RemoveValue给终身经理?

Pau*_*les 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();
                }
            }
Run Code Online (Sandbox Code Playgroud)