gpt4 book ai didi

.net - UnityContainer.Teardown 方法应该做什么?

转载 作者:行者123 更新时间:2023-12-02 03:10:50 29 4
gpt4 key购买 nike

我想显式“释放”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终身经理?

最佳答案

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();
}
}

关于.net - UnityContainer.Teardown 方法应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933388/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com