This way accessing _userService will be thread safe but calling
LoadCurrentUser will not; that method could actually be executed by
multiple threads in parallel thus breaking the thread safety.
Imho using a synchronization object would do the trick and make that
method really thread safe.
Frans, what do you think?
--
Efran Cobisi
http://www.cobisi.com
Frans Bouma wrote:
no. You should do:
private static IUserService _userService =
ContainerWebAccessorUtil.Container.Resolve<IUserService>();
public static SiteUser LoadCurrentUser()
{
if ((HttpContext.Current.User == null) ||
(!HttpContext.Current.User.Identity.IsAuthenticated))
throw new Exception("User is not authenticated.");
return _userService.GetSiteUserByUid(new
Guid(HttpContext.Current.User.Identity.Name));
}
i.o.w.: initialize the singleton in the static declaration, otherwise
it's not threadsafe. Please see the excellent articles about this by Jon
Skeet:
http://www.yoda.arachsys.com/csharp/singleton.html
===================================
This list is hosted by DevelopMentorĀ® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com