Разрешить одноэлементный объект из нескольких потоков - PullRequest
0 голосов
/ 11 марта 2011

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

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

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

1 Ответ

1 голос
/ 12 марта 2011

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

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

...