Мне нужно получить список экземпляров-одиночек из 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 () при втором запуске.Кажется, что какая-то синхронизация отсутствует?
Есть и другие способы добиться того, чего я хочу, но это, кажется, самый простой вариант, поэтому я бы хотел остаться с ним (если вообще возможно).