Разрешить одноэлементный объект из нескольких потоков
Я хочу разрешить один и тот же объект из разных потоков. Но когда я удаляю (разрываю) объект в одном потоке и разрешаю его в другом потоке, я получаю два разных объекта, хотя этот объект должен быть единым для всего приложения. LifetimeManager - это ContainerControlledLifetimeManager, который должен вести себя как синглтон, но это не так, когда у меня несколько потоков.
Что я могу сделать с этим вопросом?
Более подробно: я думаю, что часть проблемы может заключаться в том, что я регистрирую новое отображение типов в одном потоке. Несмотря на то, что я синхронизировал вызов, UnityContainer, похоже, содержит ссылку на созданный ранее элемент и предоставляет его потоку, который вызывает метод решения. Поток, который регистрирует новое сопоставление типов, получает новый элемент просто отлично.
1 ответ
ContainerControlledLifetimeManager
содержит разрешенный экземпляр только в приватном нестатическом поле. Его часто называют синглтоном, но реальное значение - это синглтон на каждый экземпляр менеджера. Как только вы зарегистрируете тип снова, он получит новый экземпляр ContainerControlledLifetimeManager
и этот экземпляр менеджера времени жизни будет содержать свой собственный экземпляр разрешенного типа.
Просто: две разные регистрации типа = два разных "синглета".