Я использую инфраструктуру MVC2 и Unity2 в качестве контейнера IOC. Я разрешаю экземпляр IHttpContextLocatorService, используя Unity, как показано ниже.
RootContainer.RegisterType<IHttpContextLocatorService, HttpContextLocatorService>(new ContainerControlledLifetimeManager());
Вышеприведенное дает мне "singleton" HttpContextLocatorService.
Функция GetCurrentContext () вызывается во многих местах нашего приложения. Я обеспокоен тем, что GetCurrentContext () не является безопасностью потока. Это непросто проверить, так как я не могу воссоздать несколько потоков, состоящих из различных RequestContext, Controller и т. Д.
Может кто-нибудь сообщить, является ли метод "GetCurrentContext ()" безопасным для потоков?
public class HttpContextLocatorService : IHttpContextLocatorService
{
[Dependency]
public IControllerLocatorService ControllerLocator { get; set; }
[Dependency]
public IRequestContextLocatorService RequestContextLocator { get; set; }
public HttpContextBase GetCurrentContext()
{
Controller controller = null;
try
{
controller = this.ControllerLocator.GetController(this.RequestContextLocator.GetCurrentRequestContext()) as Controller;
}
catch { }
if (controller == null)
{
return new HttpContextWrapper(HttpContext.Current);
}
return controller.HttpContext;
}
}