Разрешить одноэлементный объект из нескольких потоков

Я хочу разрешить один и тот же объект из разных потоков. Но когда я удаляю (разрываю) объект в одном потоке и разрешаю его в другом потоке, я получаю два разных объекта, хотя этот объект должен быть единым для всего приложения. LifetimeManager - это ContainerControlledLifetimeManager, который должен вести себя как синглтон, но это не так, когда у меня несколько потоков.

Что я могу сделать с этим вопросом?

Более подробно: я думаю, что часть проблемы может заключаться в том, что я регистрирую новое отображение типов в одном потоке. Несмотря на то, что я синхронизировал вызов, UnityContainer, похоже, содержит ссылку на созданный ранее элемент и предоставляет его потоку, который вызывает метод решения. Поток, который регистрирует новое сопоставление типов, получает новый элемент просто отлично.

1 ответ

Решение

ContainerControlledLifetimeManager содержит разрешенный экземпляр только в приватном нестатическом поле. Его часто называют синглтоном, но реальное значение - это синглтон на каждый экземпляр менеджера. Как только вы зарегистрируете тип снова, он получит новый экземпляр ContainerControlledLifetimeManager и этот экземпляр менеджера времени жизни будет содержать свой собственный экземпляр разрешенного типа.

Просто: две разные регистрации типа = два разных "синглета".

Другие вопросы по тегам