I need to point out that this implementation only guarantees that userService_ will only be initialized once; ContainerWebAccessorUtil.Container is not thread-safe, and ContainerType.Resolve ditto, but you can make them be thread-safe.
On 4/30/07, Stoyan Damov <[EMAIL PROTECTED]> wrote:
public static SiteUser LoadCurrentUser() { ... if (userService_ == null) { lock (userServiceMx_) { if (userService_ == null) { IUserService service = ContainerWebAccessorUtil.Container.Resolve<IUserService>(); Thread.MemoryBarrier(); // ^ makes sure all out-of-order writes have completed userService_ = service; } } } return userService_.GetSiteUserByUid(new Guid(HttpContext.Current.User.Identity.Name)); } ... private static object userServiceMx_ = new object(); Cheers, Stoyan On 4/26/07, Paul Cowan <[EMAIL PROTECTED]> wrote: > Hi, > > I have the following class: > > public sealed class UserHelper > { > private static IUserService _userService; > > public static SiteUser LoadCurrentUser() > { > if ((HttpContext.Current.User == null) || (!HttpContext.Current.User.Identity.IsAuthenticated)) > throw new Exception("User is not authenticated."); > if (_userService == null) > _userService = ContainerWebAccessorUtil.Container.Resolve<IUserService>(); > return _userService.GetSiteUserByUid(new Guid(HttpContext.Current.User.Identity.Name)); > } > } > > My question is, is this method thread safe from an ASP.NET application? > > Thanks > Paul > [EMAIL PROTECTED]
-- Cheers, Stoyan =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com