/// <summary>
        /// Gets the achievement providers.
        /// </summary>
        /// <returns>The achievement providers.</returns>
        public IList <IAchievementProvider> GetAchievementProviders()
        {
            if (s_achievementProviders == null)
            {
                var canditateAssemblies = AppDomain.CurrentDomain.GetAssemblies();
                var types = new List <Type>();

                foreach (var a in canditateAssemblies)
                {
                    try
                    {
                        types.AddRange(a.GetTypes());
                    }
                    catch (ReflectionTypeLoadException)
                    {
                        continue;
                    }
                }

                s_achievementProviders = types
                                         .Where(t => FilterAchievementProviders(t))
                                         .Select(t => Activator.CreateInstance(t) as IAchievementProvider)
                                         .Where(p => p.Enabled)
                                         .OrderBy(p => p.SupportedIssuers.First().Name)
                                         .ToList();

                // Saves the new achievement issuers.
                var issuerService = new AchievementIssuerService();

                foreach (var provider in s_achievementProviders)
                {
                    foreach (var issuer in provider.SupportedIssuers)
                    {
                        var savedIssuer = issuerService.GetAchievementIssuerByName(issuer.Name);

                        if (savedIssuer == null)
                        {
                            savedIssuer = issuer;
                            issuerService.SaveAchievementIssuer(savedIssuer);
                        }

                        // Refresh the id.
                        issuer.Id = savedIssuer.Id;
                    }
                }
            }

            return(s_achievementProviders);
        }
        /// <summary>
        /// Checks if the developer account exists at issuer.
        /// </summary>
        /// <returns><c>true</c>, if developer account at issuer exists, <c>false</c> otherwise.</returns>
        /// <param name="achievementIssuerId">The achievement issuer id.</param>
        /// <param name="username">The developer account username at issuer.</param>
        public bool ExistsDeveloperAccountAtIssuer(long achievementIssuerId, string username)
        {
            var provider = GetAchievementProviders()
                           .FirstOrDefault(p => p.SupportedIssuers.Any(i => i.Id == achievementIssuerId));

            if (provider == null)
            {
                return(false);
            }

            var service = new AchievementIssuerService();
            var issuer  = service.GetAchievementIssuerById(achievementIssuerId);

            if (issuer == null)
            {
                throw new ArgumentException("The achievement issuer with id '{0}' does not exists.".With(achievementIssuerId));
            }

            return(provider.Exists(new DeveloperAccountAtIssuer()
            {
                AchievementIssuerId = issuer.Id,
                Username = username
            }));
        }