Рассмотрим следующий фрагмент кода:Являются ли статические делегаты потокобезопасными?
public static class ApplicationContext
{
private static Func<TService> Uninitialized<TService>()
{
throw new InvalidOperationException();
}
public static Func<IAuthenticationProvider> AuthenticationProvider = Uninitialized<IAuthenticationProvider>();
public static Func<IUnitOfWorkFactory> UnitOfWorkFactory = Uninitialized<IUnitOfWorkFactory>();
}
//can also be in global.asax if used in a web app.
public static void Main(string[] args)
{
ApplicationContext.AuthenticationProvider =() => new LdapAuthenticationProvider();
ApplicationContext.UnitOfWorkFactory =() => new EFUnitOfWorkFactory();
}
//somewhere in the code.. say an ASP.NET MVC controller
ApplicationContext.AuthenticationProvider().SignIn(username, true);
, делегированных в статическом классе ApplicationContext потокобезопасного в том смысле, что множественные-потоки могут ссылаться на них?
С какими потенциальными проблемами я столкнусь, если я продолжу этот подход?
Пожалуйста, объясните больше, что вы подразумеваете под статическим делегатом. – leppie
@leppie В примере кода переменная static Func AuthenticationProvider является статическим делегатом. –
leypascua