Как получить все единичные экземпляры из UnityContainer? - PullRequest
0 голосов
/ 24 марта 2019

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

Есть и другие способы добиться того, чего я хочу, но это, кажется, самый простой вариант, поэтому я бы хотел остаться с ним (если вообще возможно).

...