Профили StructureMap безопасны для потока?
Я думал об использовании профилей StructureMap, чтобы облегчить выявление небольших различий в поведении в моем веб-приложении на основе типа аутентифицированного пользователя. Мой вопрос, если я сделаю что-то вроде
ObjectFactory.Profile = Session["UserType"];
это будет поточно-ориентированным или будут ли одновременные запросы потенциально мешать друг другу при разрешении вещей на основе профиля?
1 ответ
Все операции над статическим фасадом ObjectFactory являются "потокобезопасными". Это означает, что вы можете безопасно вызывать их в разных потоках, не портя внутреннее состояние ObjectFactory.
Тем не менее, вы спрашиваете, получает ли каждый поток свою личную копию ObjectFactory, и ответ - нет. Любые изменения, внесенные вами в ObjectFactory в любом потоке, будут отражены во всех других потоках внутри домена приложения.
Функция "Профили", вероятно, не является тем решением, которое вы ищете. Вы, вероятно, хотите использовать что-то вроде именованных экземпляров:
ObjectFactory.GetInstance<ISomeService>( Session["UserType"] );
Существуют и другие потенциальные решения, в зависимости от того, что вы пытаетесь сделать. Подумайте о том, чтобы опубликовать вопрос о проблеме, которую вы пытаетесь решить, например: "Как мне получить другое поведение в зависимости от типа пользователя текущего пользователя..."