using SPSolutions.Configuration.Provider; using SPSolutions.Net.Configuration; using System; using System.Configuration; using System.Configuration.Provider; using System.Threading; namespace SPSolutions.Net.Mail { public static class MailBodyManager { private static MailBodyProvider _provider = null; private static MailBodyProviderCollection _providers = null; private static object _lock = new object(); public static MailBodyProvider Provider { get { MailBodyManager.LoadProviders(); return MailBodyManager._provider; } } public static MailBodyProviderCollection Providers { get { MailBodyManager.LoadProviders(); return MailBodyManager._providers; } } private static void LoadProviders() { if (MailBodyManager._provider == null) { object @lock; Monitor.Enter(@lock = MailBodyManager._lock); try { if (MailBodyManager._provider == null) { MailBodySection mailBodySection = (MailBodySection)ConfigurationManager.GetSection("spSolutions.net.mail/mailBody"); MailBodyManager._providers = new MailBodyProviderCollection(); ProvidersHelper.InstantiateProviders(mailBodySection.Providers, MailBodyManager._providers, typeof(MailBodyProvider)); MailBodyManager._provider = MailBodyManager._providers[mailBodySection.DefaultProvider]; if (MailBodyManager._provider == null) { throw new ProviderException("Unable to load default MailBodyProvider"); } } } finally { Monitor.Exit(@lock); } } } } }