Exemple #1
0
        /// <summary>
        /// Retourne l'entrée du cache pour le type de référence.
        /// </summary>
        /// <param name="referenceType">Type de référence.</param>
        /// <returns>Entrée du cache.</returns>
        private IReferenceEntry GetReferenceEntry(Type referenceType)
        {
            string          region = GetCacheRegionByType(referenceType);
            IReferenceEntry entry  = null;

            try {
                Element element = CacheManager.Instance.GetCache(region).Get(referenceType.FullName);
                if (element != null)
                {
                    entry = element.Value as IReferenceEntry;
                }
            } catch (Exception e) {
                entry = BuildReferenceEntry(referenceType);
                ILog log = LogManager.GetLogger("Kinetix.Application");
                log.Warn("Impossible d'établir une connexion avec le cache, la valeur est cherchée en base", e);
            }

            if (entry == null)
            {
                entry = BuildReferenceEntry(referenceType);
                CacheManager.Instance.GetCache(region).Put(new Element(referenceType.FullName, entry));
            }

            return((IReferenceEntry)entry);
        }
Exemple #2
0
        /// <summary>
        /// Retourne un type de référence à partir de sa clef primaire.
        /// </summary>
        /// <param name="referenceType">Type de référence.</param>
        /// <param name="primaryKey">Clef primaire.</param>
        /// <returns>Le type de référence.</returns>
        public object GetReferenceObjectByPrimaryKey(Type referenceType, object primaryKey)
        {
            if (referenceType == null)
            {
                throw new ArgumentNullException("referenceType");
            }

            if (primaryKey == null)
            {
                return(null);
            }

            for (int i = 0; i < 2; ++i)
            {
                try {
                    IReferenceEntry entry = GetReferenceEntry(referenceType);
                    return(entry.GetReferenceValue(Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.ToUpperInvariant(), primaryKey));
                } catch (KeyNotFoundException e) {
                    if (i == 1)
                    {
                        throw new KeyNotFoundException(e.Message, e);
                    }

                    FlushCache(referenceType);
                }
            }

            throw new KeyNotFoundException();
        }
Exemple #3
0
        /// <summary>
        /// Construit l'entrée pour le cache de référence.
        /// </summary>
        /// <param name="referenceType">Type de la liste de référence.</param>
        /// <returns>Entrée du cache.</returns>
        private static IReferenceEntry BuildReferenceEntry(Type referenceType)
        {
            ICollection <ReferenceResource> resourceList = LoadResources(referenceType);
            ICollection     referenceList = referenceListLoader(referenceType);
            Type            entryType     = typeof(ReferenceEntry <>).MakeGenericType(referenceType);
            IReferenceEntry entry         = (IReferenceEntry)Activator.CreateInstance(entryType);

            entry.Initialize(referenceList, resourceList);
            return(entry);
        }
Exemple #4
0
        /// <summary>
        /// Retourne la liste de référence du type referenceType.
        /// </summary>
        /// <param name="referenceType">Type de la liste de référence.</param>
        /// <param name="referenceName">Nom de la liste de référence à utiliser.</param>
        /// <returns>Liste de référence.</returns>
        public object GetReferenceList(Type referenceType, string referenceName)
        {
            if (referenceType == null)
            {
                throw new ArgumentNullException("referenceType");
            }

            // Si l'élément n'est pas mis en cache (pas d'attribut Reference de mis sur le type), on appelle directement le service de chargement.
            if (!string.IsNullOrEmpty(referenceName))
            {
                return(ServiceManager.Instance.InvokeReferenceAccessor(referenceType, referenceName));
            }

            if (!HasCache(referenceType))
            {
                return(ServiceManager.Instance.InvokeReferenceAccessor(referenceType, null));
            }

            IReferenceEntry entry      = GetReferenceEntry(referenceType);
            object          cachedList = entry.GetReferenceList(Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.ToUpperInvariant());
            Type            typedList  = typeof(List <>).MakeGenericType(referenceType);

            return(Activator.CreateInstance(typedList, (IEnumerable)cachedList));
        }