我需要从UnityContainer获取一个单例实例的列表,并且还没有找到如何做到这一点的好例子。
这些实例中的许多实例都缓存了某些系统配置更改时需要清除的数据,并且我已经为其类型添加了ICacheReset接口。
var items = new List<ICacheReset>();
var registrations = Container.Registrations.ToArray();
foreach (var registration in registrations)
{
if (registration.LifetimeManager is ContainerControlledLifetimeManager ccltm)
{
if (ccltm.InUse == false) continue;
var value = ccltm.GetValue();
var resetableService = value as ICacheReset;
if (resetableService == null) continue;
items.Add(resetableService);
}
}
foreach(var item in items)
{
item.ResetCache();
}
这段代码似乎可以完成任务,但是在第二次运行时,它以某种方式冻结在ccltm.GetValue()上。似乎缺少一些同步?
还有其他方法可以实现我想要的功能,但这似乎是最简单的选择,所以我想继续使用它(如果可能的话)。